2014-11-18 7 views
0

다음 내용이 사실임을 알고 있습니다.Java generics 목록

List<? extends Number> aNumberSuperList = new ArrayList<>(); 
List<? extends Integer> aIntegerSuperList = new ArrayList<>(); 
aNumberSuperList = aIntegerSuperList; 

그러나 이러한 목록에는 어떤 유형의 개체를 추가 할 수 있습니다.

List<? extends Number> aNumberSuperList2 = new ArrayList<>(); 
aNumberSuperList2.add(???) 
+0

Integer, Double, ... 같은 수퍼 클래스 인 Number입니다. –

+0

일반 유형을 알 수 없으므로 전송하지 않고 아무 것도 추가 할 수 없습니다. – khelwood

+1

두 번째 코드 블록 인 'new ArrayList <>();'에 구문 오류가 있습니다. 마지막에는'()'이 표시됩니다. –

답변

7

nullList<? extends Number>에 추가 할 수 있습니다. 정확한 유형 매개 변수를 알 수 없기 때문입니다. List<Integer>이이 목록에 할당 될 수 있으므로 List<AtomicLong> 수 있습니다. 컴파일러는 addnull 이외의 것으로 호출하는 것을 막아야하며 IntegerList<? extends Number>이라고하는 것에 추가 될 수 있지만 실제로는 List<Double> 인 경우를 피할 수 있습니다. null은 여기에 추가 할 수있는 유일한 안전 항목입니다. 모든 유형이 될 수 있기 때문입니다.