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