• 怎么样获得泛型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.

  • 相关阅读:
    2021-07-12 部分集训题目题解
    2021-07-09/11 部分集训题目题解
    k8s删除Terminating状态的命名空间
    yum命令安装jenkins
    Jenkins构建docker镜像
    jenkins获取当前构建任务的构建人
    Kubernetes kubeconfig配置文件
    K8S中使用gfs当存储
    人类视觉系统对颜色和亮度的感知
    荧光的应用之全内反射荧光显微镜(TIRFM)
  • 原文地址:https://www.cnblogs.com/jiezzy/p/3674183.html
Copyright © 2020-2023  润新知