文章内容
一、背景
有如下场景:
1、父类
public abstract class Parent<T> {
public Parent(){
}
}
2、子类
public class Son<String> extends Parent<T> {
public Son(){
}
}
- 通过子类获取子类的泛型名称
- 通过子类,获取子类的父类(超类)的泛型名称。
二、获取泛型类类名的方法
1、获取子类的泛型名称
Son<String> son = new Son<>();
System.out.println(son.getClass().getTypeParameters()[0].getTypeName());
输出结果:String
2、获取子类的父类的泛型名称
获取子类的父类的泛型名称,就比上述的操作步骤中多了一个步骤,就是在1的方法上获取父类的class,然后再获取泛型名称,代码如下:
Son<String> son = new Son<>();
System.out.println(son.getClass().getSuperclass().getTypeParameters()[0].getTypeName());
输出结果:T
3、获取抽象类泛型参数类名
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public abstract class Test<T> {
public Test() {
super();
Type type = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) type).getActualTypeArguments();
System.out.println(params[0]);
}
public static void main(String[] args) {
Test<String> test = new Test<String>() {
};
}
}
输出结果:
class java.lang.String