Java使用泛型编程提取类名上T类型

一、背景

有如下场景:

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

发表评论