이 컬렉션은 (의 일부) 메소드를 복사 할 수 있습니다 :Collections.copy에서 일반 하위 유형 및 와일드 카드가 작동하는 방식은 무엇입니까?
public static <T> void copy(List<? super T> dst, List<? extends T> src) {
for (int i = 0; i < src.size(); i++) {
dst.set(i, src.get(i));
}
}
4 샘플 호출이 있습니다
List<Object> objs = Arrays.<Object>asList(2, 3.14, "four");
List<Integer> ints = Arrays.asList(5, 6);
1. Collections.copy(objs, ints);
2. Collections.<Object>copy(objs, ints);
3. Collections.<Number>copy(objs, ints);
4. Collections.<Integer>copy(objs, ints);
어떻게 위의 호출의 작품? 그것은 단지 호출 할 때 허용으로
우리는 또한 몇 가지 가능한 서명
1. public static <T> void copy(List<T> dst, List<T> src)
2. public static <T> void copy(List<T> dst, List<? extends T> src)
3. public static <T> void copy(List<? super T> dst, List<T> src)
4. public static <T> void copy(List<? super T> dst, List<? extends T> src)
의 예는 위의 호출을 위해
과 방법을 선언 할 수이들의 첫 번째는 너무 제한적이다 목적지와 소스가 정확히 같은 유형입니다. (Understood). 유형 매개 변수는 형식 매개 변수가 마지막 서명이 세 가지 유형 매개 변수 - 즉, 작동
개체 정수
경우에만 세 번째 서명이 작동객체 인 경우에만
두 번째 서명 작동 , 숫자 및 정수
제 2, 제 세 번째이자 마지막 서명을 너무 설명해주십시오?는
나머지 세 암시 적 형식 매개 변수를 사용하여 통화에 대해 동일하지만, 명시 적 형식 매개 변수가 다릅니다.
위의 진술은 무엇을 의미합니까?
는 하나는 항상 작동 간단 왜 더 복잡한 서명을 선택 "하지만 당신은 여기에 4 서명을 사용한다"? – newacct
@newacct. 이미 명시 적 형식 인수에 대해서는 다른 대안이 작동하지 않는다고 설명했습니다. 그리고 당신은 그 메소드가 명시적인 타입 인자를 갖거나 갖지 않을 것인지 여부를 알지 못합니다. –
명시 적 형식 인수가 * 올바른 * 명시 적 형식 인수가있는 경우 작동합니다. 해당 서명과 인수에 대해 틀린 명시 적 형식 인수를 선택하면 서명의 문제가 아닙니다. – newacct