1
4
这就是在Java 1.5中引入泛型时Java使用的向后兼容机制的类型擦除,使事情有点违反直觉。 通常,人们会期望重写方法的签名必须完全匹配。事实并非如此。虽然精确匹配签名肯定会重写该方法,但是 擦除 的签名也将重写该方法。这个 JLS, Section 8.4.8.1 ,状态:
——剪断
和 section 8.4.2 状态:
因为删除了
请注意,此处不允许使用参数反方差。上界,你
不能
覆盖
|
2
1
所以你偶然发现了协方差和反方差。 假设你有:
然后你实施
你也可以写:
自从 t型参数o 保证为整数 -gt; o 也保证是数字或对象 ->因为整数扩展数字扩展对象 所以你在削弱这一类型! 这就是您的代码所做的。 |
3
0
我可能发现了 answer : 在类型擦除过程中,Java编译器删除所有类型参数,如果类型参数有界,则用其第一个边界替换每一个类型,或者如果类型参数是无界的,则替换对象。 考虑以下表示单个链接列表中节点的泛型类:
因为类型参数T是无界的,Java编译器用对象替换它:
在以下示例中,泛型节点类使用有界类型参数:
Java编译器用第一个绑定类替换有界类型参数T,可比:
谢谢@oleksandr。 |