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.

  • 相关阅读:
    Windows解决端口占用
    Oracle数字格式化
    Windows生成项目目录结构
    IDEA激活教程
    Windows搭建SMB服务
    在右键新建菜单中添加新项目
    Fastjson1.2.47反序列化+环境搭建+漏洞复现
    nmap常用命令及端口
    Shiro反序列化复现
    CVE-2020-0796漏洞复现
  • 原文地址:https://www.cnblogs.com/jiezzy/p/3674183.html
Copyright © 2011-2022 走看看