[解決済み] Javaジェネリックの「?」と「Object」の違いは何ですか?
質問
Eclipseを使って、Javaのジェネリックスを適切に使用できるようにコードを整理しています。 ほとんどの場合、Eclipse は優れた方法で型を推論しますが、推論される型が可能な限りジェネリックでなければならないケースもあります。オブジェクトです。 しかし、Eclipseは、Objectの型と''の型のどちらかを選択するオプションを与えているようです。
では、何が違うのか。
HashMap<String, ?> hash1;
そして
HashMap<String, Object> hash2;
解決方法は?
のインスタンスは
HashMap<String, String>
マッチ
Map<String, ?>
ただし
Map<String, Object>
. からマップを受け取るメソッドを書きたいとします。
String
を何にでも使えます。
public void foobar(Map<String, Object> ms) {
...
}
を指定することはできません。
HashMap<String, String>
. もしあなたが
public void foobar(Map<String, ?> ms) {
...
}
うまくいった
Javaのジェネリックスで時々誤解されるのが
List<String>
のサブタイプではありません。
List<Object>
. (ただし
String[]
のサブタイプです。
Object[]
これがジェネリックと配列の相性が悪い理由のひとつです。(Javaの配列は共変であり、ジェネリックスはそうではなく、それらは
不変
)).
サンプルです。
を受け付けるメソッドを書きたい場合は、以下のようにします。
List
の
InputStream
のサブタイプであり
InputStream
と書くと、次のようになります。
public void foobar(List<? extends InputStream> ms) {
...
}
ところで Joshua BlochのEffective Java は、Javaの単純でない部分を理解するのに最適なリソースです。(上の質問もこの本の中で非常によくカバーされています)。
関連
-
java の例外が発生しました java
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] JDKとJREの違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ファインバグタイプ
-
jd-gui Java Exceptionが発生しました。
-
final, finally, finalizeの違いについて話してください。
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
HttpClientがGZIP形式でない場合の対処法
-
このラインで複数のマーカーを解決する方法
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について