java - Java中Collection复制函数的工作原理

标签 java generics

我试图了解 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/

相关文章:

java - WebSecurityConfigurerAdapter 配置重叠权限

java - 如何将 Jackson 与嵌套泛型一起使用?

c# - 如何在 C# 中克隆通用列表?

java - Java 中 Class 类型的可变参数

java - java泛型绑定(bind)不匹配错误

java - 查找 JPA 的最新条目

java -/* 和/** 之间的区别

java - 在简单工厂中使用泛型时如何解决这个困境

java - For Each 循环和 For 循环 Java

Java 泛型的奇怪行为