package com.dounine.corgi.utils;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* Hello world!
*
*/
public final class GenericsUtils {
/**
* 根据反射,获得定义Class时声明的父类的范型参数的类型
* @param clazz 本类class
* @return 超类类型
*/
public static Class getSuperClassGenricType(Class<?> clazz) {
return getSuperClassGenricType(clazz, 0);
}
/**
* 根据反射,获得定义Class时声明的父类的范型参数的类型
* @param clazz 本类class
* @param index 获取的参数索引
* @return 超类类型
* @throws IndexOutOfBoundsException 数组下标越界
*/
public static Class<?> getSuperClassGenricType(Class<?> clazz, int index) throws IndexOutOfBoundsException {
Type genType = clazz.getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
return Object.class;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
Class coz = null;
if (index >= params.length || index < 0) {
coz = Object.class;
}else if (!(params[index] instanceof Class)) {
coz = Object.class;
}
coz = (Class<?>) params[index];
return coz;
}
}