我遇到了不兼容的类型错误,但我并不理解原因。
这段代码为什么是错的?
List<List<String>> a = new ArrayList<>();
List b = a; // is ok
List<List> c = a; // incompatible types
我遇到了不兼容的类型错误,但我并不理解原因。
这段代码为什么是错的?
List<List<String>> a = new ArrayList<>();
List b = a; // is ok
List<List> c = a; // incompatible types
List<List>
隐式指定的
List<List<Object>>
不是
的父级。List<List<String>>
在第一种情况下成功的原因是因为类型推断。编译器会基本上检查表达式需要哪种类型才能有意义,并生成相应的代码。
List<List<String>> a = b;
List<List<Object>> a = b // which does not compile
List b = a;
不涉及泛型。它定义了一个名为b的原始List类型,可以将任何对象作为其元素。
不要将其与...进行比较
List<List> c = a;
由于涉及到泛型,因此编译器会在这里强制进行类型兼容性检查。
Integer
对象。 a
列表只能包含 String
对象。