【发布时间】:2018-12-06 15:32:38
【问题描述】:
考虑下面的类
class Foo<T> {
List<String> bar() { return null; }
}
如果我制作这样的原始实例:
final Foo foo = new Foo();
我仍然希望foo.bar() 返回List<String>。因为bar 的签名独立于T。但是,如果我这样做:
final List<String> strings = foo.bar();
我得到一个未经检查的任务
未经检查的分配:“java.util.List”到“java.util.List”。原因:'foo' 是原始类型,所以 bar 的结果被删除了。
我知道上面写着foo被擦除了,但是为什么foo的擦除也会把List<String>擦除到List呢?
目前我正在使用@SuppressWarnings("unchecked") 压制此警告,因为这对我来说似乎毫无意义。
【问题讨论】:
-
欢迎使用 Java 泛型。
-
不要称其为“无类型/已擦除”。每个人都知道的词是 raw 类型 ;-) ... 发明自己的话只会让读者感到困惑。是的,本质上,答案是:不要使用原始类型。
-
谢谢,我忘了怎么称呼它,现在相应地编辑了问题。也感谢您将第二个链接添加到已经回答的块
-
哈哈 :) Felk,我比你早一个小时发了similar question。