集合复制方法混淆(超级和扩展通配符)

时间:2016-01-03 17:55:16

标签: java generics collections extends super

我目前正在研究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)
    }
}

有谁可以解释我的理解中哪里出错了?

0 个答案:

没有答案