美文网首页
BridgeMethod

BridgeMethod

作者: timar | 来源:发表于2019-10-22 09:39 被阅读0次

jdk1.5引入泛型之后,子类继承抽象父类或实现接口后,在重写带泛型的方法时,java在编译时会自动补上一个bridgeMethod。

泛型擦除:在带有泛型的类在编译成Class文件后,其中的泛型T等都会编译成Object

public interface Super<T> {
    T get(T t);
}
public class Sub implements Super<String> {

    @Override
    public String get(String s) {
        return s.concat("a");
    }
    public static void main(String[] args) {
        Super sub = new Sub();
        sub.get(new Object());
    }
}

编译成Class文件后应该是

public interface Super {
    Object get(Object t);
}
public class Sub implements Super {

    @Override
    public String get(String s) {
        return s.concat("a");
    }

    // 生成的BridgeMethod
    @Override
    public Object get(Object s) {
        return this.get((String) s);
    }

    public static void main(String[] args) {
        Super sub = new Sub();
        sub.get(new Object());
    }
}

所以这里,如果没有生成bridgeMethod的话,Sub类就没有实现Super类的get方法,不符合java语义。
这里在运行时也会报类型转换异常。
总结就是,jvm是没有泛型这个概念的(所以有泛型擦除,T换成Object),纯粹是java提供的一个便利。

相关文章

  • BridgeMethod

    jdk1.5引入泛型之后,子类继承抽象父类或实现接口后,在重写带泛型的方法时,java在编译时会自动补上一个bri...

网友评论

      本文标题:BridgeMethod

      本文链接:https://www.haomeiwen.com/subject/gyifvctx.html