Java反射之getGenericSuperclass()用法

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class Test {

    public static class T<T1, T2> {}
    public static class Template extends T<Integer, String> {}

    public static void main(String[] args) {
        Template tt = new Template();
        // getClass() 获得该类的类类型变量
        Class clazz = tt.getClass();
        System.out.println(clazz);
        // getSuperclass() 获得该类的父类
        System.out.println(clazz.getSuperclass());
        // getGenericSuperclass() 获得该类带有泛型的父类
        Type type = clazz.getGenericSuperclass();
        System.out.println(type);
        // ParameterizedType 参数化类型,即泛型
        // 将Type转化为参数化类型(即泛型)
        ParameterizedType p = (ParameterizedType) type;
        // getActualTypeArguments() 获取参数化类型的数组,泛型可能有多个
        Type[] actualTypeArguments = p.getActualTypeArguments();
        // 将Type转化为类型变量(即Class)
        Class c1 = (Class) actualTypeArguments[0];
        Class c2 = (Class) actualTypeArguments[1];
        System.out.println(c1);
        System.out.println(c2);
    }
}

猜你喜欢

转载自blog.csdn.net/m0_37732829/article/details/115395888