为什么 List<List<Integer>> list = new ArrayList<ArrayList<Integer>>() 是错误的?

5

为什么以下Java代码是错误的?

List<List<Integer>> list = new ArrayList<ArrayList<Integer>>();

我知道List<List<Integer>> list = new ArrayList<List<Integer>>()是正确的。


2
这个重复的问题实际上更简单,因为它不像这个问题那样“双重通用”。但是如果你理解了这一点,你可以很容易地将其应用到这个问题上。基本上,考虑list.add(new LinkedList<Integer>())对一个作为ArrayList<ArrayList<Integer>>创建的对象正在做什么(并且可能仍然被引用)。 - Jon Skeet
这个问题过去已经被问过多次。事实上,@JonSkeet已经回答过不止一次了。他在这里的回答,在我看来比他在那个他将其关闭为重复的问题中的回答要好,尽管我非常讨厌在任何关于继承的问题中都使用Dog extends Animal作为示例。 - Dawood ibn Kareem
1个回答

0

因为Java中的泛型不是协变的。


你能给我更多的解释吗?与协变有关的地方在哪里? - villion
它被标记为重复,请遵循链接的问题。 - Crazyjavahacking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接