【反射】method.isBridge() 桥接方法

泛型擦除留下的方法

接口

public interface SuperClass<T> {
    void method(T t);
}

实现类

public class ChildClass implements SuperClass<String> {
    @Override
    public void method(String s) {
    System.out.println(s);
  } 
}

泛型是在jdk1.5引入的,为了向前兼容,所以会在编译时去掉泛型(泛型擦除)。SuperClass接口中的method方法的参数在虚拟机中只能是Object。

接口(泛型擦除后)

public interface SuperClass {
    void method(Object  t);
}

实现类(javap -p ChildClass.class 查看编译后的ChildClass )

public class ChildClass implements SuperClass<java.lang.String> {
  public ChildClass();
  public void method(java.lang.String);
  public void method(java.lang.Object);
}

反射调用

 public static void main(String[] args) throws Exception {
        ChildClass obj = new ChildClass ();
        Method method = ChildClass.class.getMethod("method", Object.class);
        System.out.println(method.isBridge()); // true
    }
原文地址:https://www.cnblogs.com/itplay/p/13230107.html