java - ArrayList用不同的数据类型初始化

标签 java generics arraylist

首先,为什么第一行可以编译,而第二行却不能? 其次,在第二行的情况下,两种类型是否始终需要相同,即左侧的整数和右侧的整数。或者左右可以有不同的类型吗?

    List<? super Integer> nums1 = new ArrayList<Number>();  //COMPILES
    List<Integer> nums2 = new ArrayList<Number>();          //DOES NOT COMPILE

最佳答案

您的问题本质上是 this SO-article 的重复但简而言之:

? super T 表示“任何 T​​ 的父类(super class)”。 NumberInteger 的父类(super class),因此这是可以接受的。第二行不起作用只是因为 Number 不是 Integer。反之亦然也不行

ArrayList<Number> nums2 = new ArrayList<Integer>();

也会导致编译错误。为此,您可以使用

ArrayList<? extends Number> nums2 = new ArrayList<Integer>(); 

关于java - ArrayList用不同的数据类型初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46693683/

相关文章:

java - CrudRepository 自定义方法实现?

c - 是否可以使用泛型函数将数组复制到 C 中另一个数组的不同类型

用于参数化类型的 Java 迭代器

java - Android:ArrayList存储奇怪的值

c# - 泛型方法类型和方法参数不匹配

android - 尝试遍历 ArrayList 时应用程序崩溃

java - 忽略编译错误 - Java

java - 没有在for循环中调用Android AsyncTask

java - 使用 Hibernate 无法持久化一对多层次结构对象结构

java - 对象化,Key<T> 可能吗?解决方法?