Java获取泛型参数的Class类型

作者: Thresh0ld | 来源:发表于2018-02-07 16:14 被阅读42次

    需求:两个类:A带泛型参数T,B继承A并给出泛型参数类型,现在想在A中获取T的Class类型。

    public abstract class A<T> {
        public A() {
            Type genericSuperclass = this.getClass().getGenericSuperclass();
            ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
            Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
            Class tClass = (Class) actualTypeArguments[0];
    
            System.out.println(tClass.getName());
    
    // 用一句话获取就是下面一行代码,只是去除了中间变量,可读性差了些
    //        Class tCls = (Class) (((ParameterizedType) (this.getClass().getGenericSuperclass())).getActualTypeArguments()[0]);
        }
    }
    
    public class B extends A<String> {
    }
    

    执行一下代码:

    public static void main(String[] args){
         new B();//控制台会输出java.lang.String
    }
    

    相关文章

      网友评论

        本文标题:Java获取泛型参数的Class类型

        本文链接:https://www.haomeiwen.com/subject/xlhazxtx.html