示例一:获取父类的泛型的类型
java">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]);
}
}
示例二:获取成员变量的泛型类型
java">public class Emp<T, Q> {
private static Emp<String, Integer> emp = new Emp<>();
public static void main(String[] args) throws Exception {
Field field = Emp.class.getDeclaredField("emp");
Type genericType = field.getGenericType();
System.out.println(genericType);
ParameterizedType pt = (ParameterizedType) genericType;
Type[] actualTypeArguments = pt.getActualTypeArguments();
System.out.println(actualTypeArguments[0]);
System.out.println(actualTypeArguments[1]);
}
}
示例三:获取局部变量的泛型的类型
java">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]);
}
}