java - Java中的无界通配符

标签 java generics bounded-wildcard

无界通配符之间是否有区别,例如<?>和一个有界通配符,其边界为 Object ,例如<? extends Object> ?

我记得在某处读到过,泛型的早期草案有所不同,但再也找不到那个来源了。

最佳答案

对于大多数人来说,<? extends Object><?> 相同,就像每个人在这里建议的那样。

但是,它们在两个非常细微的点上有所不同:

  1. JVMS(Java 虚拟机规范)对无界通配符有一个特殊规范,如 ClassFileFormat-Java5指定无界通配符编码为 * , 而将对象有界通配符编码为 +Ljava/lang/Object; .此类更改将通过任何分析字节码的库泄漏。编译器编写者也需要处理这个问题。来自 revisions to "The class File Format"

  2. 从 reifiblity 的角度来看,它们是不同的。 JLS 4.6 and 4.7编纂 List<?>作为可具体化的类型,但 List<? extends Object>作为删除类型。任何添加 .isReifiable() 的库作者(例如 mjc lib )需要考虑到这一点,以遵守 JLS 术语。来自 JLS 4.6 and 4.7 .

关于java - Java中的无界通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016017/

相关文章:

c# - 解析通用方法签名时是否考虑了约束?

java - 无法使用构造函数?

java - Oracle新的Java许可证,旧版本有何影响?

c# - 是否可以在 C# 中将 GenericClass<SubClass> 添加到 List<GenericClass<Base>>?

java - 使用通配符实例化通用对象

java - 从 <? 中检索子类型延伸动物>

java - 为什么在有界通配符泛型中不能有多个接口(interface)?

java - Axis Web 服务客户端错误

Java BlueCove - 从服务器向客户端发送信息

java - 类对象的通用类型规范