首先,为什么第一行可以编译,而第二行却不能? 其次,在第二行的情况下,两种类型是否始终需要相同,即左侧的整数和右侧的整数。或者左右可以有不同的类型吗?
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)”。 Number
是 Integer
的父类(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/