2017-10-24 2 views
1

이유는 다음과 같은 ArrayList<List<Integer>> 내로 ArrayList<ArrayList<Integer>>를 할당 할 수 없습니다 : ArrayList에와 할당 ArrayList를 <리스트 <Integer>><ArrayList를이 <Integer>>

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

모든 ArrayLists 목록이 아니므로 나는 목록을 어디에 넣을 수 있습니다 , 나는 또한 ArrayList를 배치 할 수 있습니까?

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> 

을하지만, 다음이 실패 :이 합법적 인 경우

답변

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<Integer> a = y.get(0); // ClassCastException! 

y의 첫 번째 요소는 LinkedList 아닌 ArrayList 때문이다. x의 유형

ArrayList<? extends List<Integer>>` 

인 경우는 그 목록 (문자 null 제외) 아무것도 추가 할 수 없습니다 때문에

당신은 xy을 할당 할 수 있습니다, 따라서 ClassCastException가 발생하지 않을 것입니다.

관련 문제