both methods have same erasure, yet neither overrides the other 【泛型类型擦除与重载和覆盖问题】

先看一段代码
public class Father {
    void test(Object o){}
}
class Son<T> extends Father{
     void test(T o){}//编译错误!
}

这段代码会报一个编译错误,both methods have same erasure, yet neither overrides the other。

这个错误的意思是,两个方法在类型擦除后,具有相同的原生类型参数列表,但是也不能覆盖另一个方法。

泛型类型在编译后,会做类型擦除,只剩下原生类型。如参数列表中的T类型会编译成Object,但是会有一个Signature。

尽管两个test方法具有相同的字节码,但是类型参数信息用 一个新的签名(signature) 属性记录在类模式中。JVM 在装载类时记录这个签名信息,并在运行时通过反射使它可用。

这就导致了这个方法既不能作为覆盖父类test方法的方法,也不能作为test方法的重载。



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值