使用反射获取父类的泛型参数类型
代码如下
public class ReflectionUtils {
/**
* @Description:通过反射,获取class声明的父类的泛型参数类型
* 如:public B extends A<String>
* @author linluor
*/
public static Class getSuperClassGenericType(Class clazz,int index) {
Type genType = clazz.getGenericSuperclass();
if(!(genType instanceof ParameterizedType)) {
return Object.class;
}
Type[] params = ((ParameterizedType)genType).getActualTypeArguments();
if(index >= params.length || index < 0) {
return Object.class;
}
if(!(params[index] instanceof Class)) {
return Object.class;
}
return (Class) params[index];
}
public static<T> Class<T> getSuperClassGenericType(Class clazz){
return getSuperClassGenericType(clazz, 0);
}
}
部分代码解析
clazz.getGenericSuperclass():获取运行时带有泛型的父类
((ParameterizedType)genType).getActualTypeA