Java 为什么可以';t原始类型具有具有泛型返回类型的方法
考虑下面的类Java 为什么可以';t原始类型具有具有泛型返回类型的方法,java,generics,java-8,Java,Generics,Java 8,考虑下面的类 class Foo<T> { List<String> bar() { return null; } } 我仍然希望foo.bar()返回一个列表。因为bar的签名独立于T。但是,如果我这样做: final List<String> strings = foo.bar(); final List strings=foo.bar(); 我得到一份未经检查的作业 未选中的分配:“java.util.List”到“java.util.Li
class Foo<T> {
List<String> bar() { return null; }
}
我仍然希望foo.bar()
返回一个列表
。因为bar
的签名独立于T
。但是,如果我这样做:
final List<String> strings = foo.bar();
final List strings=foo.bar();
我得到一份未经检查的作业
未选中的分配:“java.util.List”到“java.util.List”。原因:“foo”具有原始类型,所以条的结果被删除
我知道上面说foo
被删除了,但是为什么foo
的删除也会将List
删除到List
目前,我正在使用@SuppressWarnings(“unchecked”)
抑制此警告,因为它对我来说似乎毫无意义。对于“稀有”类型的规范已经太复杂了。为一个毫无意义的案例增加额外的复杂性是毫无意义的
只要正确地使用泛型,不要使用原始类型。如其他答案所述,使用“原始”类会丢失所有泛型,而不仅仅是类定义的泛型。解决方法是只使用通配符,它不关心类型,但保留泛型:
final Foo<?> foo = new Foo<>();
final Foo Foo=new Foo();
欢迎使用Java泛型。不要称之为“无类型/擦除”。大家都知道的单词是raw type;-)。。。编造自己的文字只会让读者感到困惑。是的,从本质上来说,答案是:不要使用原始类型。谢谢,我忘了怎么称呼它了,现在相应地编辑了这个问题。同时也感谢你为已经回复的blockHaha添加了第二个链接:)Felk,我在你之前不到一个小时就发布了一条消息。“稀有”类型是故意输入的吗?@MarkRotteveel No。它指的是部分原始的类型。
final Foo<?> foo = new Foo<>();