桥接方法
泛型类型擦除的影响,以及 bridge 方法介绍
1 | public class Node<T> { |
当做如下使用时
1 | Node node = new MyNode(5); |
我们的子类中实际是没有 setData(Object.class)的方法的,java
编译器在进行类型擦除的时候会自动生成一个synthetic
方法,也叫bridge
方法,我们通过生成的字节码可以看到实际bridge
方法,首先校验类型是否为Integer
,然后在调用setData(Integer.class)
因此,上述代码会抛出ClassCastException
1 | public void setData(java.lang.Integer); |
桥接子类获取泛型
父类泛型可以使用
1 | ParameterizedTypeImpl type = (ParameterizedTypeImpl) MyNode.class.getGenericSuperclass(); |
接口泛型
1 | ParameterizedTypeImpl[] types = (ParameterizedTypeImpl[]) MyNode.class.getGenericInterfaces(); |
Spring 注入桥接子类注意
1 | public interface Generic<T,R> {} |
1 |
|