ArrayList初始化具有不同的数据类型

时间:2017-10-11 16:52:06

标签: java generics arraylist

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

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

1 个答案:

答案 0 :(得分:2)

您的问题实际上是this SO-article的副本,但简而言之:

? super T表示“任何超级T的东西”。 NumberInteger的超类,因此可以接受。第二行不起作用,因为Number不是Integer。反之亦然,无论如此

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

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

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