为什么这不编译:List <List > lss = new ArrayList <ArrayList >();

以下代码:

List<List> lss = new ArrayList<ArrayList>(); 

导致此编译时错误:

 Type mismatch: cannot convert from ArrayList<ArrayList> to List<List> 

修复我将代码更改为:

 List<ArrayList> lss = new ArrayList<ArrayList>(); 

为什么抛出这个错误? 这是因为List<List>的generics类型List是实例化的,因为List是一个接口,这是不可能的吗?

问题是generics中的类型说明符(除非你告诉它)允许子类。 你必须完全匹配。

尝试:

 List> lss = new ArrayList>(); 

要么:

 List> lss = new ArrayList>(); 

来自http://docs.oracle.com/javase/tutorial/java/generics/inheritance.html

注意:给定两个具体类型A和B(例如,Number和Integer), MyClassMyClass无关,无论A和B是否相关。 MyClassMyClass的公共父是Object。

在此处输入图像描述

同样的道理

 List myList = new ArrayList(); 

不会工作。

您可以查看此问题以获取更多详细信息。