비록 직관적이지는 않지만 차이가 있습니다. 자세한 내용은 the java standard tutorial을 읽어 보시기 바랍니다.
기본적으로 두 개는 서로 다른 호환되지 않는 유형입니다. List<E>
은 확장, 서브 클래스 또는 실제로 유형이 E
인 객체를 저장할 수 있지만 그 자체의 유형입니다. List<Object>
에 String
을 추가 할 수 있더라도 을 List<Object>
참조에서 참조 할 수 없습니다.
List<?>
은 매개 변수화 된 참조를 참조 할 수있는 목록 참조임을 의미합니다. List<?>
은 List<String>
또는 List<Integer>
을 나타낼 수 있습니다. 그것은 어떤 인터페이스 나 클래스에 묶여있을 때 가장 유용합니다. 예를 들어, 아래의 첫 번째 메소드 (자바 표준 튜토리얼에서 수정)는 List<Number>
일 뿐이며 List<Double>
또는 List<Integer>
과 같은 것은 아닙니다.
public static double sumOfList(List<Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
그러나 와일드 카드를 사용하여 다음 코드는
List<Double>
또는
List<Integer>
수 있습니다. 더 유연합니다.
public static double sumOfList(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
이것은 여러 번 묻습니다 ... 왜 사이트를 검색하지 않습니까? – SJuan76
'list.add'를 실행 해보면 차이점을 알 수 있습니다. –
공정하게 말하면, "중복"도 실제로는 하나도 아닙니다. OP는 그 질문보다 미묘한 차이점에 대해 질문하고 있습니다. –