以下代码:
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是一个接口,这是不可能的吗?
答案 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>
是对象。
答案 2 :(得分:2)