Java 通用列表的通用列表的初始化

Java 通用列表的通用列表的初始化,java,list,initialization,Java,List,Initialization,为什么我不能声明这样的列表 List<List<Object>> a = new ArrayList<ArrayList<Object>>(); List a=new ArrayList(); ArrayList是List类型的,所以我假设上面的代码是有效的 但这是有效的: List<ArrayList<Object>> b = new ArrayList<ArrayList<Object>>()

为什么我不能声明这样的列表

List<List<Object>> a = new ArrayList<ArrayList<Object>>();
List a=new ArrayList();
ArrayList是List类型的,所以我假设上面的代码是有效的

但这是有效的:

List<ArrayList<Object>> b = new ArrayList<ArrayList<Object>>();
listb=newarraylist();
内部列表必须声明为ArrayList


有人能解释一下吗?

你把你的泛型弄糊涂了。做你想做的事的方法是

List<List<Object>> a = new ArrayList<List<Object>>();
当然,最好的方法是使用Java 7:

List a=new ArrayList();

这不是内部列表的问题,而是泛型参数的问题。只要通用参数相同(即
ArrayList
),初始化成功。否则,Java不允许您进行赋值,因为编译器无法保证类型安全

设想这是可能的:

// Let's pretend this compiles:
List<List<Object>> a = new ArrayList<ArrayList<Object>>();
这应该足以编程到接口

List<List<Object>> a = new ArrayList<>();
// Let's pretend this compiles:
List<List<Object>> a = new ArrayList<ArrayList<Object>>();
a.add(new LinkedList<Object>());
List<List<Object>> a = new ArrayList<List<Object>>();