无法理解如何在java中定义List列表

kum*_*mo2 1 java collections associative-array list java-7

我想了解两个定义之间的区别以及为什么正确的定义是正确的,错误是错误的.

那个显示编译错误的那个

List<List<Integer>> arr2 = new ArrayList<ArrayList<Integer>>();  
Run Code Online (Sandbox Code Playgroud)

它给我的错误:

 try2.java:8: error: incompatible types: ArrayList<ArrayList<Integer>> cannot be
converted to List<List<Integer>>
                List<List<Integer>> arr2 = new ArrayList<ArrayList<Integer>>();
Run Code Online (Sandbox Code Playgroud)

正在工作的那个:

List<ArrayList<Integer>> arr = new ArrayList<ArrayList<Integer>>();
Run Code Online (Sandbox Code Playgroud)

注意:

我理解为什么下面这个有效:

List<Integer> arr = new ArrayList<Integer>();  
Run Code Online (Sandbox Code Playgroud)

编辑-1:

现在我只想了解问题所在 List<List<Integer>> arr2 = new ArrayList<ArrayList<Integer>>();

Gho*_*ica 6

你不需要任何:

List<List<Whatever>> items = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

完成.

重要的是要理解:你不能创建那些"内在"列表.您只需创建一个List(具有"列表列表").稍后,您会这样做:

List<Whatever> innerItems = new ArrayList<>();
items.add(innerItems);
Run Code Online (Sandbox Code Playgroud)

例如.原因是:集合不是数组.Java允许您写下创建完整的2-Dim数组的表达式.但是集合没有多维度的概念(实现方式)!

其中一部分是泛型实际上是使用类型擦除实现的.这意味着:实际的列表实现不知道您在源代码中使用的泛型类型.它只处理实例Object.从这个意义上说,实现"不知道"新列表应该包含的内容是不可能的List<Whatever>.