not*_*oop 19 java generics bounded-wildcard
无界通配符<?>和绑定通配符之间是否有区别Object,例如<? extends Object>?
我记得曾经在某处看过,仿制药的早期草稿有所不同,但是找不到那个来源了.
not*_*oop 32
从实用的角度来看,对大多数人<? extends Object>来说<?>,就像每个人都在这里建议的一样.
但是,它们在两个非常微小和微妙的方面有所不同:
JVMS(Java虚拟机规范)具有针对无界通配符的特殊规范,ClassFileFormat-Java5指定无界通配符被编码为*,同时将对象绑定通配符编码为+Ljava/lang/Object;.此类更改将通过任何分析字节码的库泄漏.编译器编写者也需要处理这个问题.从修订版到"类文件格式"
从再生性的角度来看,这些是不同的. JLS 4.6和4.7编纂List<?>为reifiable类型,但List<? extends Object>作为一个erasured类型.任何库编写者添加.isReifiable()(例如mjc lib)都需要考虑到这一点,以遵守JLS术语.从JLS 4.6和4.7.
Tom*_*ine 18
作为一个节奏点,如果类/接口/构造函数/方法声明一个绑定(除了extends Object)之外有区别.
interface Donkey<T extends Thing> { }
...
Donkey<? extends Object> foo; // FAIL
Run Code Online (Sandbox Code Playgroud)