java—为什么原始类型不能有带有泛型返回类型的方法

ef1yzkbh  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(364)

这个问题在这里已经有答案了

什么是原始类型?为什么不使用它(15个答案)
两年前关门了。
考虑下面的课程

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”有原始类型,所以条的结果被删除。
我知道上面写着 foo 被抹掉了,但为什么抹掉了 foo 同时删除 List<String>List ?
目前我正在用 @SuppressWarnings("unchecked") 因为这对我来说毫无意义。

arknldoa

arknldoa1#

“稀有”类型的规范已经太复杂了。为一个毫无意义的案例增加额外的复杂性是毫无意义的。
只需正确使用泛型,而不使用原始类型。

0sgqnhkj

0sgqnhkj2#

如其他答案所述,使用“原始”类会丢失所有泛型,而不仅仅是类定义的泛型。解决方法是只使用通配符,它不关心类型,但保留泛型:

final Foo<?> foo = new Foo<>();

相关问题