我目前正在研究java泛型作为编程类的一部分,我在理解Collections类中的静态复制方法时遇到了问题:
public static <T> void copy(List<? super T> dest, List<? extends T> src){
for(int i=0; i<src.size(); i++){
dest.add(src.get(i));
}
}
据我所知,只要目标集合类型属于同一类型或目标集合的超类型,此方法允许您将所有元素从一个集合复制到另一个集合。
但是,我很难理解为什么List<? extends T> src
是必要的而不仅仅是List<T> src
。
我编写了自己的类和复制方法来试用它,它的工作原理与普通的Collections.copy方法完全相同:
public class Colls <T> {
public static <T> void copy(List<? super T> dest, List<T> src){
for(int i=0; i<src.size(); i++){
dest.add(src.get(i));
}
}
}
然后在一个新课程中测试它:
public class Main{
public static void main(String[] args){
List<Number> nums = new ArrayList<Number>();
List<Integer> ints = Arrays.asList(1,2,3,4,5);
Colls.copy(nums, ints)
}
}
有谁可以解释我的理解中哪里出错了?