泛型擦除留下的方法
接口
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
}