为什么这不编译:List <list <string>&gt; lss = new ArrayList <arraylist <string>&gt;(); </arraylist <string> </list <string>

时间:2013-12-20 11:27:26

标签: java generics arraylist

以下代码:

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 个答案:

答案 0 :(得分:13)

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

尝试:

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

或:

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

答案 1 :(得分:3)

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

  

注意:给定两种具体类型A和B(例如,Number和   整数),MyClass<A>MyClass<B>无关,无论如何   A和B是否相关。 MyClass<A>的共同父母   并且MyClass<B>是对象。

enter image description here

答案 2 :(得分:2)

同样的原因

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

不会工作。

有关详细信息,请参阅this问题。