0

以下のようなリストを作成しました。

ArrayList<? extends Object> arr = new ArrayList<Object>();

上記の行で私が理解していることは、オブジェクトのサブクラスである要素をリストに追加できる上限です。今、私はこのようにしようとしています:

String str = new String("str");
Integer i = new Integer(4);
Object obj = new Object();
arr.add(obj);
arr.add(str);
arr.add(i);

それらはすべてエラーを出しています.ここでの問題は何ですか? しかし、私はそれを

ArrayList<? super Object> arr = new ArrayList<Object>();

すべて動作します。下限です。誰か説明してくれませんか。

4

2 に答える 2

3

コレクションがジェネリック型として上限のあるワイルドカードを使用している場合、null 以外をコレクションに追加することはできません。その理由は、コレクションに間違った時間を追加している可能性があるためです。詳細については、こちらを参照してください

于 2013-02-11T10:43:34.420 に答える
0

宣言とは、 が未知の型のwith 要素であるArrayList <? extends Object> arrことを意味し、この未知の型について知られている唯一のことは、それが extends であることです。要素のタイプがわからない場合、そこに入れることができる唯一の値は です。他の値を入力するとエラーが発生します。これは、入力する値が(不明な)要素の型に変換可能であることをコンパイラが確認できないためです。次のコードは違法になります。arrArrayListObjectArrayListnullArrayListArrayList

arr.set (0, arr.get (0));

コンパイラの観点からはarr.get (0)、オブジェクトを拡張する未知の型の値を返すため、これは違法arr.set (0, (Object)arr.get (0))です。しかし、はではなく、を拡張する未知の型であるため、型の値を安全に入れることはできObjectません。それは整数でも何でも構いません。arrarrArrayListObjectArrayListObjectArrayListStringArrayList

于 2013-02-11T12:23:13.487 に答える