泛型类型获取
ParameterizedType
public interface Simple<T, E> {
}
Type[] getActualTypeArguments();//T,E
Type getRawType();//Simple
Type getOwnerType();//Simple<T, E>
以下内容摘自https://blog.csdn.net/qq_27070117/article/details/103069308
clazz.getTypeParameters()
如上代码,我给类TV声明了两个泛型V和T,而通过getTypeParameters()获取到的数组正代表类头部声明的泛型,我们可以通过getName()方法获取到声明时定义的字符串(这个例子中就是 V和T)
clazz.getGenericSuperclass()
clazz.getGenericSuperclass()的返回值携带了父类的泛型,而通过getActualTypeArguments()可以获取到这个泛型,如果instanceof Class是true,则此泛型有实际类型,为false则此类型是 TypeVariable,即还是泛型。
clazz.getGenericInterfaces()
与getGenericSuperclass类似,只不过这个方法获取的是接口信息,因为接口可以实现多个,所以返回值是一个数组。如上图,可通过此方法可以获取到所有接口的泛型。
superClazz.isAssignableFrom(SubClazz)
父类Class.isAssignableFrom(子类.class), 来判断父类是否是子类的父类或父接口,返回值boolean类型