我试图了解 Java Generic 的工作原理。问题就在这里。
public static void main(String args[]){
List<Object> obj = Arrays.<Object>asList(23,"456",56.89);
List<Integer> intb = new ArrayList<>();
intb.add(234);
intb.add(345);
Collections.copy(obj,intb);
for(Object d : obj){
System.out.println(d);
}
}
这会很好地工作。但是我实现了自己的复制功能,如下所示
public static <T> void copy(List<? super T> des,List<? extends T> scr){
for(T f : scr){
des.add(f);
}
}
然后我使用 copy(obj,intb) 而不是 Collections.copy(obj,intb)。然后我收到错误。我不明白为什么,但我知道“? extends T”表示任何属于 T 子类型的类型,“? super T”表示任何属于 T 父类(super class)型的类型。
最佳答案
您不能向此 fixed-length list 添加任何内容:
List<Object> obj = Arrays.<Object>asList(23,"456",56.89);
您只能为其元素设置新值(这就是Collections.copy()
的作用)。另请参阅 Javadoc :
Returns a fixed-size list backed by the specified array.
您可能想要做的是:
List<Object> obj = new ArrayList<>(Arrays.asList(23,"456",56.89));
关于java - Java中Collection复制函数的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25366009/