返回顶部
首页 > 资讯 > 后端开发 > Python >关于Java反射给泛型集合赋值问题
  • 623
分享到

关于Java反射给泛型集合赋值问题

2024-04-02 19:04:59 623人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

泛型 Java泛型简单描述下: 比如创建一个List集合,我想在里边只放Student对象信息,就需要写成 List<Student> studentList = new

泛型

Java泛型简单描述下:

比如创建一个List集合,我想在里边只放Student对象信息,就需要写成

List<Student> studentList = new ArrayList();

这个时候List里面就只能放入Student类型的值,如果强行放入其他类型(比如说Integer)的就会提示错误信息:

java.lang.ClassCastException: java.lang.Integer cannot be cast to com.entity.Student

按照这个结果来看,studentList里面就只能放入Student类型的值,没有什么问题。

然后,奇怪的事情发生了,在公司项目的log里发现了一个error:

java.lang.ClassCastException: java.lang.Integer cannot be cast to com.entity.Student

原代码类似于:

Student student = studentList.get(0);

What? 集合创建的时候明明给的泛型是Student啊,这个String是哪蹦出来的。

这个时候又得提出一个概念:

反射

比较全面的解释:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

一通debug,我发现了这么一段代码(来自于hutools包内的某个方法中,详细是哪个记不太清了,模仿着写写):

    Class<? extends List> aClass = list.getClass();
        Method method = aClass.getMethod("add", Object.class);
        for (Object o : arg) {
            method.invoke(list, o);
        }
        return list;
    }

差不多就这样子,入参是[1,2,3,4]和studentList,在外边取list中的值时,发现:

java.lang.ClassCastException: java.lang.Integer cannot be cast to com.entity.Student

这玩意,利用反射获取了List的add方法,值类型也不判断,直接给塞进集合里了。。。。

其实刚开始碰到时,一脸懵的,耗费了很长时间取排查问题,我泛型Student的List,怎么会出现这种问题,从List中取出来的值不能转换成Student。。。。

不过后来发现原因之后,感觉其实也不复杂,挺简单的,还是经验太少,判断错误能力不行,共勉。

上面的代码用的Student类和String、Integer代替,公司内部代码就不透露了。

到此这篇关于Java反射给泛型集合赋值的文章就介绍到这了,更多相关Java反射给泛型集合赋值内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 关于Java反射给泛型集合赋值问题

本文链接: https://lsjlt.com/news/162563.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 关于Java反射给泛型集合赋值问题
    泛型 Java泛型简单描述下: 比如创建一个List集合,我想在里边只放Student对象信息,就需要写成 List<Student> studentList = new...
    99+
    2024-04-02
  • 如何分析Java反射给泛型集合赋值问题
    今天给大家介绍一下如何分析Java反射给泛型集合赋值问题。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。泛型Java泛型简单描述下:比如创建一个List集合,我...
    99+
    2023-06-26
  • Java 基础详解(泛型、集合、IO、反射)
    计划把 Java 基础的有些部分再次看一遍,巩固一下,下面以及以后就会分享自己再次学习的一点笔记!不是有关标题的所有知识点,只是自己觉得模糊的一些知识点。1.对于泛型类而言,你若没有指明其类型,默认为Object;2.在继承泛型类以及接口的...
    99+
    2023-05-30
    java 泛型 集合
  • MyBatis查询数据,赋值给List集合时,数据缺少的问题及解决
    目录MyBatis查询数据赋值给List集合数据缺少解决办法Mybatis查询时数据丢失的问题经过排查得出结论解决办法MyBatis查询数据赋值给List集合数据缺少 今天在使用My...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作