zoukankan      html  css  js  c++  java
  • 怎么样获得泛型T的Class对象?

    public class GenClass<T> {

    private Class<T> entityClass;


    }


    public class Test {

    public static void main(String[] args) {
    GenClass<User> gen = new GenClass<User>();
    }

    }

    这样用的话,GenClass中如何获得T类型的Class对象

    java中没法得到泛型参数化类型,因为在编译期没法确定泛型参数化类型,也就找不到对应的类字节码文件,自然就不行了


    Type genType = clazz.getGenericSuperclass();
    Type [] params = ((ParameterizedType) genType).getActualTypeArguments();
    return (Class) params[0];


    泛型反射的关键是获取ParameterizedType,再调用它的getActualTypeArguments()方法获得实际绑定的类 型。但注意public class BookManager<Book>是不能被反射的,因为擦拭法的缘故。只有在Superclass 或者成员变量(Field.getGenericType())等有函数返回ParameterizedType的时候才能成功反射

    Java中的范型是用擦除实现的,简单点儿就是编译期能看到类型信息,但运行期T其实都变成Object了,也就是说运行期通过反射不会获得类型信息,就算获得也只是Object类型.
    但这也不是完全不可能的,对于带有上边界限定符的如<T extends Comparable<T>>
    你可以获得到Comparable类型.这个信息被保存到了运行时.通用化之后<T>获得的与<T extends Object>相同,上边界换成了Object.

  • 相关阅读:
    Dsl学习笔记-3
    Dsl学习笔记-2
    Dsl学习笔记-1
    多线程学习笔记
    DataGrid研究笔记-3
    DataGrid研究笔记-2
    从基础到分析,聊一聊企业报表平台的建设规划!
    深度解读|数据化管理的四个层次
    干货:实现数据可视化的几个工具选择(工具+编程语言)
    案例分享|某医药集团的BI建设案例
  • 原文地址:https://www.cnblogs.com/jiezzy/p/3674183.html
Copyright © 2011-2022 走看看