这是我网上拿到的项目的源码里反射工具类里的两个方法,小弟对第一个方法中返回值类型为什么是Class“两个”很不理解,在这里Class表示什么啊?第二个方法里返回值类型不...
这是我网上拿到的项目的源码里反射工具类里的两个方法,小弟对第一个方法中返回值类型为什么是 Class“两个”很不理解,在这里 Class表示什么啊?第二个方法里返回值类型不是Class吗?为什么第一个方法会有两个返回值类型呢?求大侠详解,不胜感激!
/**
* 通过反射, 获得Class定义中声明的父类的泛型参数的类型. 如无法找到, 返回Object.class.
*/
@SuppressWarnings("unchecked")
public static Class getSuperClassGenricType(@SuppressWarnings("rawtypes") Class clazz) {
return getSuperClassGenricType(clazz, 0);
}
/**
* 通过反射, 获得定义Class时声明的父类的泛型参数的类型. 如无法找到, 返回Object.class.
*/
@SuppressWarnings("rawtypes")
public static Class getSuperClassGenricType(Class clazz, int index) {
Type genType = clazz.getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
logger.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
return Object.class;
} else {
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + params.length);
return Object.class;
}
if (!(params[index] instanceof Class)) {
logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
return Object.class;
}
return (Class) params[index];
}
}
展开