Java 使用不同的数据类型初始化ArrayList
首先,为什么第一行编译而第二行不编译? 其次,在第二行的情况下,这两种类型是否总是需要相同,即左边的整数和右边的整数。或者在左边和右边可以有不同的类型Java 使用不同的数据类型初始化ArrayList,java,generics,arraylist,Java,Generics,Arraylist,首先,为什么第一行编译而第二行不编译? 其次,在第二行的情况下,这两种类型是否总是需要相同,即左边的整数和右边的整数。或者在左边和右边可以有不同的类型 List<? super Integer> nums1 = new ArrayList<Number>(); //COMPILES List<Integer> nums2 = new ArrayList<Number>(); //DOES NOT COMPILE
List<? super Integer> nums1 = new ArrayList<Number>(); //COMPILES
List<Integer> nums2 = new ArrayList<Number>(); //DOES NOT COMPILE
List你的问题本质上是重复的,但简而言之:
?super T
表示“T的超类中的任何内容”Number
是一个Integer
的超类,因此这是可以接受的。第二行不起作用仅仅是因为Number
不是Integer
。反之亦然
ArrayList<Number> nums2 = new ArrayList<Integer>();
ArrayList nums2=new ArrayList();
也会导致编译错误。你可以用
ArrayList<? extends Number> nums2 = new ArrayList<Integer>();
ArrayList你的问题本质上是重复的,但简而言之:
?super T
表示“T的超类中的任何内容”Number
是一个Integer
的超类,因此这是可以接受的。第二行不起作用仅仅是因为Number
不是Integer
。反之亦然
ArrayList<Number> nums2 = new ArrayList<Integer>();
ArrayList nums2=new ArrayList();
也会导致编译错误。你可以用
ArrayList<? extends Number> nums2 = new ArrayList<Integer>();
ArrayList你需要这个做什么?我理解。代码可能看不到曙光。我猜是因为Number
是Integer
的一个超类,但不是Integer
。你需要这个做什么?我理解。代码可能看不到曙光。我想是因为Number
是Integer
的一个超类,但不是Integer
。然后作为重复关闭。@Thorbjørnravandersen有两个原因:1。我不认为我能一个人解决一个问题,我觉得这样做有点粗鲁。2.即使链接的SO文章在这里涵盖了这个问题,我认为回答这个问题更有帮助,因为如果答案中使用了您自己的代码,而不是仅仅指向一般的答案(这仍然值得阅读以获得全部细节),然后以重复的形式关闭,则更容易理解。@ThorbjørnRavnAndersen有两个原因:1。我不认为我能一个人解决一个问题,我觉得这样做有点粗鲁。2.即使链接的SO文章在这里涵盖了这个问题,我认为回答这个问题更有帮助,因为如果答案中使用了您自己的代码,而不是仅仅指向一般的答案,那么更容易理解(这仍然值得阅读以获得全部细节)