Java中通配符泛型的实际用法

SPI*_*984 6 java generics wildcard

我最近参加过Java考试,有很多关于Java中的通配符泛型.但是,在实践中很少谈到它们的用法.我们应该何时使用它们?我们来看看一个典型的用法:

void check(Collection<? extends Animal> list) {
  // Do something
}
Run Code Online (Sandbox Code Playgroud)

文档说的是,此集合不允许向列表中添加任何元素.因此,基本上可以使用通配符将集合设置为只读.这是他们唯一的用法吗?那有什么实际需要吗?在过去的四年里,我参与了许多Java编程项目,但我还没有看到任何可以广泛使用通配符等功能的项目.

因此,从实际的角度来看,是否存在通配符泛型不可避免且必要的情况?

Adr*_*n M 3

那么,从实际的角度来看,是否有一些情况下通配符泛型是不可避免且必要的呢?

我不认为它们是“不可避免和必要的”,因为 Java 编译器无论如何都会删除它们。但是,使用它们时,您可以在编译时获得更严格的类型检查,并避免类型转换。无论如何,谁想输入强制类型转换?:)

通配符使用指南

类型擦除