Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同的数据类型初始化ArrayList_Java_Generics_Arraylist - Fatal编程技术网

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文章在这里涵盖了这个问题,我认为回答这个问题更有帮助,因为如果答案中使用了您自己的代码,而不是仅仅指向一般的答案,那么更容易理解(这仍然值得阅读以获得全部细节)