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里面看到它的用处。
  • 相关阅读:
    HashMap 和HashTable
    两种方式获得键盘录入
    打印流 printStream
    对象操作流--存储对象
    内存输出流
    序列流
    装饰设计模式
    递归
    IO流(使用指定的码表读写字符)
    IO-字符流 练习
  • 原文地址:https://www.cnblogs.com/cwjcsu/p/8433083.html
Copyright © 2011-2022 走看看