2017-10-11 10 views
0

第1に、第1行目はコンパイル時にコンパイルされないのはなぜですか? 2番目の行の場合、両方の型が常に同じである必要があります。つまり、左側のIntegerと右側のIntegerです。または、左右に異なるタイプを使用することは可能ですか?異なるデータ型を持つArrayListの初期化

List<? super Integer> nums1 = new ArrayList<Number>(); //COMPILES 
    List<Integer> nums2 = new ArrayList<Number>();   //DOES NOT COMPILE 
+0

何が必要ですか? –

+0

わかりました。コードはおそらく日の光を見ません。 – JonJavaK

+1

'Number'は' Integer'のスーパークラスですが、 'Integer'ではありません。 – Blorgbeard

答えて

2

あなたの質問はesentially this SO-articleの複製であるが、要するに:

? super Tは "Tのスーパークラスであるもの" を意味します。 NumberIntegerのスーパークラスですので、これが受け入れられます。 NumberIntegerではないため、2行目は単純に機能しません。どちらもその逆ではありません。

ArrayList<Number> nums2 = new ArrayList<Integer>(); 

また、コンパイルエラーが発生します。あなたが使えるもの

ArrayList<? extends Number> nums2 = new ArrayList<Integer>(); 
+0

その後、重複して閉じます。 –

+0

@ThorbjørnRavnAndersen2つの理由:1.私は単独で質問を閉じることはできないと思うし、そうするのはちょっと失礼だ。 2.リンクされたSO-記事がここでの質問をカバーしていても、一般的な答えを指すのではなく、自分のコードが答えに使用されているかどうかを理解する方が簡単なので、詳細を読むために読む) – Lothar

関連する問題