zoukankan      html  css  js  c++  java
  • 泛型类里面获取到泛型的类型

    下面的代码可以让你在抽象的泛型类里面获取到泛型的类型
    abstract class A<T> {
        Class<T> clazz;
        void doGetClass() {
            Type genType = this.getClass().getGenericSuperclass();
            Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
            this.clazz = (Class<T>) params[0];
        }
    }
    

    1,当然上面的代码不是万能的,只有实例化了T的子类才可以按上述方法获得T,如果子类没有实例化T的话,是无法获取的。
    比如有:
    //class B并没有实例化T。
     class B<T> extends A<T>{
       ...
      }
    

    由于class B并没有实例化T,所有下面的代码拿不到String.class:
    B<String> b = new B<String>();
    b.doGetClass();//拿不到String
    


    2,正确的做法:
    class B extends A<String>{
    }
    

    B按上面方式声明,下面代码可以拿到String.class:
    B b = new B();
    b.doGetClass();// b.clazz is String.class
    


    2的做法可以在Hibernate里面看到它的用处。
  • 相关阅读:
    鱼眼拼接实验
    多字节字符集 unicode字符集
    GPU编程接口
    零基础学java第一天
    最牛的减肥方法
    近期思考
    c++的stl容器
    蓝桥杯历年穷举题
    git简单指令3
    git简单指令2
  • 原文地址:https://www.cnblogs.com/cwjcsu/p/8433083.html
Copyright © 2011-2022 走看看