[解決済み】Javaジェネリックの型パラメータにあるクエスチョンマークは何を意味するのか?[重複しています]。
質問
これは、Stanford Parserに付属するいくつかの例から引用したコードの小さなスニペットです。 私は4年ほどJavaで開発をしていますが、このスタイルのコードが何を示しているのか、あまり強く理解したことがありません。
List<? extends HasWord> wordList = toke.tokenize();
コードの細かいところは気にしない。 私が混乱しているのは、一般的な表現が英語で一体何を伝えようとしているのか、ということです。
どなたか説明していただけませんか?
どのように解決するのですか?
? extends HasWord
を拡張するクラス/インターフェイスを意味します。
HasWord
." つまり
HasWord
それ自体、あるいはその子であっても......基本的にはすべて
instanceof HasWord
プラス
null
.
もっと専門的に言うと
? extends HasWord
の項目31で扱われる境界付きワイルドカードです。
エフェクティブジャバ 第3版
139 ページからです。 第2版の同じ章は
オンラインでPDFが利用可能
bounded wildcardsの部分は134ページからのItem 28です。
Update: PDFのリンクはOracleがしばらく前に削除したため、更新しました。 現在は、Queen Mary University of London's School of Electronic Engineering and Computer Scienceがホストしているコピーにリンクしています。
更新2:なぜワイルドカードを使用したいのか、もう少し詳しく説明します。
メソッドを宣言する際、そのシグネチャに
List<HasWord>
であるならば、あなたが渡すことができる唯一のものは
List<HasWord>
.
しかし、もしその署名が
List<? extends HasWord>
を渡すと
List<ChildOfHasWord>
の代わりに
とは微妙な違いがあることに注意してください。
List<? extends HasWord>
と
List<? super HasWord>
. ジョシュア・ブロッホはこう言った。PECS = producer-extends, consumer-super.
この意味は、もしあなたのメソッドがデータを取り出すコレクションを渡すなら(つまり、コレクションがあなたのメソッドが使用する要素を生成する)、次のように使うべきだということです。
extends
. もし、あなたのメソッドがデータを追加する (つまり、あなたのメソッドが作成した要素を消費する) コレクションを渡すのであれば、それは
super
.
これは混乱するように聞こえるかもしれません。 しかし、あなたはそれを
List
's
sort
コマンド(Collections.sortの2引数版へのショートカットに過ぎない)を使用することができます。 を取る代わりに
Comparator<T>
というように、実際には
Comparator<? super T>
. この場合、コンパレータは
List
を使用して、リスト自体を並べ替えています。
関連
-
[解決済み] Javaでパラメータの型の横にある3つの点は何を意味するのですか?
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] シンクロナイズド」とはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] Java- <T extends Comparable<T>>の意味?
-
[解決済み] スリーピング中のスレッドが割り込まれ、データベースへの接続が失われる
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] x--やx++はここで何をするのですか?