java - Java中通配符泛型的实际使用

标签 java generics wildcard

我最近参加了一次 Java 考试,其中有一个很大的部分是关于 Java 中的通配符泛型的。然而,关于它们在实践中的用法却鲜有提及。我们什么时候应该使用它们?让我们看一个典型的用法:

void check(Collection<? extends Animal> list) {
  // Do something
}

文档说,这个集合不允许向列表中添加任何元素。所以基本上通配符可用于使集合只读。那是他们唯一的用途吗?有什么实际需要吗?在过去的四年里,我参与了很多 Java 编程项目,但我还没有看到任何项目会广泛使用通配符这样的特性。

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

最佳答案

So, from the practical point of view, are there any situations when wildcard generics are unavoidable and necessary?

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

Guidelines for Wildcard Use

Type Erasure

关于java - Java中通配符泛型的实际使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15540759/

相关文章:

javascript - 如何将Struts2属性设置为JavaScript函数的参数?

java - 如何使用 JSoup 导航页面

c# - 类型转换泛型

Java 泛型 : What is the compiler's issue here? ("no unique maximal instance")

bash - 在 bash 脚本中将通配符作为参数替换到文件路径后如何扩展通配符?

java - 这个 Java 类型层次结构是否正确?

java - 在 List 中使用通配符时出现编译时错误

java - 将 swing 项目导出到 jar 文件后,每次启动时都会执行代码吗?

java - 为 Grid 类结构实现 java.util.Collection 是否正确?

java - CDI 的受限泛型