繁体   English   中英

泛型不兼容的类型

[英]Generics incompatible types

偶然发现不兼容的类型错误原因我不明白。

为什么这段代码错了?

List<List<String>> a = new ArrayList<>();
List b = a; // is ok
List<List> c = a; // incompatible types

这里描述。 超类型兼容性仅适用于“外部”级别,但不适用于类型参数之间的“内部”。 它不直观,但它是如何工作的...此外, List是一种原始类型,它的行为与List<Object>略有不同 - 这里描述了它

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM