[英]Generics 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;
因为它涉及泛型,这就是编译器在这里强制执行类型兼容性检查的原因。
简短回答:因为你的c
列表包含一个包含所有类型对象的列表。
例如,您还可以添加Integer
对象。
而a
列表可以只包含String
对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.