如何获取Java集合中泛型的Class对象

 更新时间:2025年06月21日 10:24:26   作者:?abc!  
这篇文章主要介绍了如何获取Java集合中泛型的Class对象问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

获取Java集合中泛型的Class对象

直接获取时获取不到的,类型被虚拟机擦除了

  • 泛型的正常工作是依赖编译器在编译源码的时候,先进行类型检查,然后进行类型擦除并且在类型参数出现的地方插入强制转换的相关指令实现的。编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如List在运行时仅用一个List类型来表示。为什么要进行擦除呢?这是为了避免类型膨胀。

利用子类实现父类的泛型是可以的

如何才能获取到泛型的类型

  • 必须具有真实类型的存在
  • 泛型的类型是明确的如 (List <User> 是明确的,List<T> 是不明确的)

尝试

如果直接使用getClass等方法,会出现下面的情况

这个是获取不到类型的

但是换成下面的方式,便可以获取:使用下边这组大括号,这一点非常重要

换一种类型,一样的情况

所以,可以通过上面的方式去获取类型

上面的这种方法的思路为:利用子类实现父类的泛型是可以的

通过获取第一个元素去判断当前属于哪一种类型即可

很多情况下,按下面的思路去操作即可

public static void main(String[] args) {

        List<String> strs = new ArrayList<>();
        strs.add("xxx");

        List<Integer> ins = new ArrayList<>();
        ins.add(1);

        List<Boolean> boos = new ArrayList<>();
        boos.add(true);

        List<Long> lons = new ArrayList<>();
        lons.add(null);

        System.out.println(((List<?>)strs).get(0) instanceof String);//true
        System.out.println(((List<?>)ins).get(0) instanceof String);//false
        System.out.println(((List<?>)boos).get(0) instanceof Boolean);//true
        System.out.println(((List<?>)lons).get(0) instanceof Long);//false

    }

其他的直接去判断,通过查找并尝试,没有找到符合我要求的,怎么通过上面的方法去暂时实现了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot如何添加全局异常捕获类

    springboot如何添加全局异常捕获类

    这篇文章主要介绍了springboot如何添加全局异常捕获类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 整理很详细的Java正则表达式使用大全

    整理很详细的Java正则表达式使用大全

    这篇文章为大家整理了很详细的Java正则表达式使用大全,大家在使用Java正则表达式的时候可查阅这篇文章,认为不错的朋友可以收藏起来
    2015-12-12
  • Java中生成微信小程序太阳码的实现方案

    Java中生成微信小程序太阳码的实现方案

    这篇文章主要介绍了Java中生成微信小程序太阳码的实现方案,本文讲解了如何生成微信小程序太阳码,通过微信提供的两种方案都可以实现,在实际的项目中建议采用第二种方案,需要的朋友可以参考下
    2022-05-05
  • 基于SpringBoot Mock单元测试详解

    基于SpringBoot Mock单元测试详解

    这篇文章主要介绍了基于SpringBoot Mock单元测试详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Windows系统安装JDK小结

    Windows系统安装JDK小结

    这篇文章主要给大家详细介绍了Windows系统安装JDK的方法和步奏,十分的细致,有需要的小伙伴可以参考下
    2016-03-03
  • 关于java.util.Random的实现原理详解

    关于java.util.Random的实现原理详解

    Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法,下面这篇文章主要给大家介绍了关于java.util.Random实现原理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-08-08
  • JAVA线程池监控以及动态调整示例详解

    JAVA线程池监控以及动态调整示例详解

    这篇文章主要为大家介绍了JAVA线程池监控以及动态调整示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 使用Spring Data Redis实现数据缓存的方法

    使用Spring Data Redis实现数据缓存的方法

    目前在系统架构设计中使用Redis实现缓存,这篇文章主要介绍了使用Spring Data Redis实现数据缓存的方法,具有一定的参考价值,需要的朋友可以参考下
    2018-11-11
  • Spring Initializr只能创建为Java 17版本以上的问题解决

    Spring Initializr只能创建为Java 17版本以上的问题解决

    这篇文章主要给大家介绍了关于Spring Initializr只能创建为Java 17版本以上问题的解决办法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • 全面了解servlet中cookie的使用方法

    全面了解servlet中cookie的使用方法

    下面小编就为大家带来一篇全面了解servlet中cookie的使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06

最新评论