Kra*_*ken 23 java list arraylist incomplete-type
以下行给出了错误:
Incompatible Types.
List<List<Integer>> output = new ArrayList<ArrayList<Integer>>();
Run Code Online (Sandbox Code Playgroud)
是什么原因?
编辑
我理解如果我将我的第二个ArrayList更改为List,它不会给我错误.我想知道错误的原因.谢谢
Bin*_*eng 18
正确的书写应该是:
List<List<Integer>> ret = new ArrayList<List<Integer>>();
既然这样,你不仅增加ArrayList
,而且LinkedList
以ret
Daw*_*ica 17
如果你有一个,List<List<Integer>>
那么你就可以添加一个LinkedList<Integer>
.但你不能这样做ArrayList<ArrayList<Integer>>
,所以后者不可能是一种类型List<List<Integer>>
.
原因是泛型不是协变的.
考虑更简单的情况:
List<Integer> integers = new ArrayList<Integer>();
List<Number> numbers = integers; // cannot do this
numbers.add(new Float(1337.44));
Run Code Online (Sandbox Code Playgroud)
现在List持有一个Float,这当然很糟糕.
对你的情况也一样.
List<ArrayList<Integer>> al = new ArrayList<ArrayList<Integer>>();
List<List<Integer>> ll = al; // cannot do this
ll.add(new LinkedList<Integer>())
Run Code Online (Sandbox Code Playgroud)
现在你有一个ll
包含的列表LinkedList
,但是它al
被声明为ArrayList
s 的列表.
更少的文字更多的修复:
List<List<Integer>> lists = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
或者
List<List<Integer>> lists = new ArrayList<List<Integer>>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28605 次 |
最近记录: |