为什么这段代码无法编译:List<List<String>> lss = new ArrayList<ArrayList<String>>();

4
以下代码:

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

导致这个编译时错误的原因是:
Type mismatch: cannot convert from ArrayList<ArrayList<String>> to List<List<String>>

为了修复问题,我更改了代码如下:

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

为什么会抛出这个错误?是因为在 List<List<String>> 中的通用类型 List 被实例化了,而 List 是一个接口,所以这是不可能的吗?
3个回答

13

问题在于泛型中的类型说明符(除非你告诉它允许子类,否则)不允许子类。必须完全匹配。

请尝试以下两种方法:

List<List<String>> lss = new ArrayList<List<String>>();
或者:
List<? extends List<String>> lss = new ArrayList<ArrayList<String>>();

确切地说,<> 括号中的所有内容都应该匹配。只有在 <> 括号之前的类别可以是子类型。 - Pawel

3

2
同样的原因
List<List> myList = new ArrayList<ArrayList>();

无法工作。

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


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