Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';t原始类型具有具有泛型返回类型的方法_Java_Generics_Java 8 - Fatal编程技术网

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<>();