示例一:获取父类的泛型的类型
public class Emp<T, Q> {
class Stu extends Emp<String, Integer> {
}
@Test
void fun() {
final Type type = Emp.class.getGenericSuperclass();
final ParameterizedType parameterizedType = (ParameterizedType) type;
System.out.println(parameterizedType.getActualTypeArguments()[0]);
System.out.println(parameterizedType.getActualTypeArguments()[1]);
}
}
示例二:获取成员变量的泛型类型
public class Emp<T, Q> {
private static Emp<String, Integer> emp = new Emp<>();
public static void main(String[] args) throws Exception {
//通过反射获取student属性
Field field = Emp.class.getDeclaredField("emp");
//通过属性获取泛型
Type genericType = field.getGenericType();
System.out.println(genericType);
// ParameterizedType表示的是带泛型的类型
ParameterizedType pt = (ParameterizedType) genericType;
// 获取具体的泛型类型,这个方法会返回一个Type的数组
Type[] actualTypeArguments = pt.getActualTypeArguments();
System.out.println(actualTypeArguments[0]);
System.out.println(actualTypeArguments[1]);
}
}
示例三:获取局部变量的泛型的类型
public class Emp<T, Q> {
public static void main(String[] args) throws Exception {
//注意:泛型对象必须以匿名内部类的方式定义
Emp<String, Integer> emp = new Emp<>() { //匿名内部类
};
final Type type = emp.getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) type;
final Type[] types = parameterizedType.getActualTypeArguments();
System.out.println(types[0]);
System.out.println(types[1]);
}
}