가 실패 :Java Generics는 변하지 않습니다? 아래의 코드를 컴파일
public static void swap(List<?> list, int i, int j) {
list.set(i, list.set(j, list.get(i)));
}
같은 :
Swap.java:5: set(int,capture#282 of ?) in List<capture#282 of ?> cannot be applied to (int,Object)
list.set(i, list.set(j, list.get(i)));
그러나 경우에 나는이 작업을 수행 : 완벽하게 작동
public static void swap(List<?> list, int i, int j) {
swapHelper(list, i, j);
}
private static <E> void swapHelper(List<E> list, int i, int j) { list.set(i, list.set(j, list.get(i)));
}
그것은.
는하지만 여기에 기본 의심의 여지가있다. 제네릭은 불변이라고 알려져 있으므로 List<String>
은 List<Object>
의 하위 유형이 아닙니다. 맞습니까?
그런 경우 위 방법을 사용하면 List<?>
을 List<E>
에 전달할 수 있습니까? 어떻게 작동합니까?
와일드 카드는 표준 할당 할 수있는 검사와 다르게 작동합니다. – hexafraction