2017-10-24 20 views
1

は、なぜ私は以下のようにArrayList<List<Integer>>ArrayList<ArrayList<Integer>>を割り当てることができません。割り当てのArrayList <リスト<Integer>><ArrayListの<Integer>>

ArrayList<List<Integer>> x = new ArrayList<ArrayList<Integer>>(); 

は、すべてのArrayListリストされないため、どこで一覧を置くことができます私はArrayListを配置することもできますか?

答えて

0

xArrayList<List<Integer>>として入力された場合、あなたはxに、リストの任意の種類を詰め込むことができますので、これは法的でなければなりませんので:

x.add(new LinkedList<Integer>()); 

しかしxが実際にArrayList<ArrayList<Integer>>であれば、それはすべきではありません許可されます。

これは許可されています

ArrayList<? extends List<Integer>> x = new ArrayList<ArrayList<Integer>>(); 

しかしxのその定義と、あなたが実際にxに何かを置くことはできません。

1

これが合法だった場合は、次の行うことができます:

ArrayList<ArrayList<Integer>> y = new ArrayList<>(); 
ArrayList<List<Integer>> x = y; // Compiler error! Pretend it's OK, though. 

x.add(new LinkedList<>()); // Fine, because a LinkedList<Integer> is a List<Integer> 

が、その後、これは失敗します:

ArrayList<Integer> a = y.get(0); // ClassCastException! 

yの最初の要素がLinkedList、ないArrayListあるために。

あなたはそれ故にClassCastExceptionは発生しません、そのリストに(nullリテラル以外)何も追加できなかったのでxのタイプは

ArrayList<? extends List<Integer>>` 

ある場合は、xyを割り当てることができます。

関連する問題