나는 SCJP/OCPJP에 대해 공부하고 있으며, 나는 이음새가 내게 이상하다는 샘플 질문을 발견했다. 질문에일반적인 유형의 클래스 인스턴스화 <?>
List<?> list = new ArrayList<?>();
List<? extends Object> list2 = new ArrayList<? extends Object>();
은 "올바른"답이 코드는 컴파일 것이다 그러나 두 컬렉션에 추가하는 런타임 오류가 발생 것이라고했다 :
는 샘플 코드는 두 개의 일반적인 컬렉션을 인스턴스화.
이와 같은 코드를 컴파일하려고하면 오류가 발생합니다. 자바 튜토리얼에서는 이러한 유형의 코드조차 보여주지 않고 대개 와일드 카드를 업 캐스팅의 일부로 사용합니다.
Collection<?> c = new ArrayList<String>();
도 합법적 인 코드 위의 두 제네릭 컬렉션 있습니까? 내 논리에 의한 두 번째 것은 인터페이스 만 허용하지 않습니다. 첫 번째는 완전히 쓸모없는 것처럼 보입니다. 제어를 시도하지 않는 제네릭을 사용해야하는 이유는 무엇입니까?
이것이 어떻게 컴파일되는지는 모르겠지만 두 컬렉션에 모두 잘 추가 할 수 있습니다. 단 하나의 객체 만 추가하면됩니다. 어떤 개체가 모든 클래스에 유효한지 알아내는 독자를위한 연습으로 남겨 둡니다 :) – Voo
당신도 할 수 없습니다. 샘플 질문/답변이 잘못되어 있고 분명히 그렇습니까? – jeremyjjbrown
다운이 지금 어떤 이유로 투표를 했습니까? – jeremyjjbrown