Java反射给泛型集合赋值

泛型

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包内的某个方法中,详细是哪个记不太清了,模仿着写写):

    public List testReflect(Object arg[], List list) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
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。。。。

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

Java反射给泛型集合赋值的更多相关文章

  1. 深入分析Java反射(三)-泛型

    前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...

  2. 将java类的泛型集合转换成json对象

    一般用extjs开发传输都是用json比较多,这个将来大家也许会用到... ConvertJsonUtils.java package com.sunweb.util.jsonfactory; imp ...

  3. 2015第22周六Java反射、泛型、容器简介

    Java的反射非常强大,传递class, 可以动态的生成该类.取得这个类的所有信息,包括里面的属性.方法以及构造函数等,甚至可以取得其父类或父接口里面的内容. obj.getClass().getDe ...

  4. java 反射 子类泛型的class

    很早之前写过利用泛型和反射机制抽象DAO ,对其中获取子类泛型的class一直不是很理解.关键的地方是HibernateBaseDao的构造方法中的 Type genType = getClass() ...

  5. Java反射,泛型在Json中的运用

    最近项目中遇到了Json数据自动获取的功能,不然令人想起java的反射,已经很长时间没复习java了正好一块连java的这一块内容一起过一遍.java中的反射无疑就相当于java开发者的春天,在众多的 ...

  6. java 反射和泛型

    反射 在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问.检测和修改它本身状态或行为的一种能力.[1]用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为. 要注意术 ...

  7. 利用特性和反射给泛型Model赋值

    为了解决从数据库读取的表字段和自己建的viewModel字段名称不相符的问题 本人小白,初次将特性及反射应用到实例,写的不好的地方还请大家多多包涵 新建一个控制台应用程序命名为ReflectAndAt ...

  8. java 反射和泛型-反射来获取泛型信息

    通过指定对应的Class对象,程序可以获得该类里面所有的Field,不管该Field使用private 方法public.获得Field对象后都可以使用getType()来获取其类型. Class&l ...

  9. java反射获得泛型参数getGenericSuperclass():获取到父类泛型的类型

    public class Person<T> { } import java.lang.reflect.ParameterizedType; import java.lang.reflec ...

随机推荐

  1. 2020腾讯犀牛鸟网络安全T-Star高校挑战赛writeup

    签到 浏览器禁用js,在www目录下有 key 命令执行基础 使用 | 可以执行其他命令,在 ../目录下有 key.php cat 一下读出来 你能爆破吗 一开始随便输了个账号的时候不是这个页面,抓 ...

  2. 新建任务(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 新建任务,这操作简单得就跟在Excel的单元格里输入个数据一样,不过也不是一点讲究都没有. 首先得选对视图. 不是所有的视 ...

  3. 40张图+万字,从9个数据类型帮你稳稳的拿捏Redis数据结构

    摘要:本文把Redis新旧版本的数据结构说图解一遍,共有 9 种数据结构:SDS.双向链表.压缩列表.哈希表.跳表.整数集合.quicklist.listpack. 本文分享自华为云社区<为了拿 ...

  4. CF1064A Make a triangle! 题解

    Content 有三条长度分别为 \(a,b,c\) 的线段.你可以在一个单位时间内将一条线段的长度增加 \(1\),试求出能使这三条线段组成一个三角形的最短时间. 数据范围:\(1\leqslant ...

  5. JAVA微信公众号网页开发——将文章群发到微信公众号中(文章使用富文本,包含图片)

    SendTextToAllUserAct.java package com.weixin.sendmessage; import org.apache.commons.lang.StringUtils ...

  6. JAVA实现查询栏目、类别(菜单)返回树结构(递归)

    其中Channel.java是栏目结构,ChannelDto是我自己封装的返回给前端的数据,可以根据自己的来 这个的逻辑就是双重循环遍历每个类别,然后判断如果当前类别是其他类别的父级,那么就把其他类别 ...

  7. 『与善仁』Appium基础 — 27、模拟手势点击坐标

    目录 1.模拟手势点击坐标 2.tap()用法 3.练习 4.弊端 1.模拟手势点击坐标 在定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问) 那就拿出绝招:点击元素所在位置的 ...

  8. GoLang设计模式18 - 适配器模式

    说明 适配器模式是一种结构型设计模式.我们用常用的两种笔记本电脑来说明一下这种设计模式. 我们常用的笔记本无非是这两大类: Macbook Pro Windows Laptop 当前这两类笔记本常见的 ...

  9. 【LeetCode】801. Minimum Swaps To Make Sequences Increasing 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 参考资料 日期 题目地址:https:// ...

  10. Entropy, relative entropy and mutual information

    目录 Entropy Joint Entropy Conditional Entropy Chain rule Mutual Information Relative Entropy Chain Ru ...