黑马程序员技术交流社区

标题: 在一个定义为ArrayList<Integer>集合中添加String的原理是什么 [打印本页]

作者: 黑色的雪    时间: 2014-11-21 14:23
标题: 在一个定义为ArrayList<Integer>集合中添加String的原理是什么
如题所示,请问一下各位利用反射添加String对象原理是什么,为什么能添加
作者: zhangyangLengen    时间: 2014-11-21 14:36
因为泛型中参数类型的插除原理,在编译器对源代码进行编译成class文件其中泛型中参数类型会被擦除,所以以后用反射对集合进行操作,是跳过编译器,在class文件中没有了参数类型,所以用反射能够往集合中添加任何引用类型的数据
作者: DamonZh    时间: 2014-11-21 17:38
一楼答的漂亮 我还没学到反射 但这个擦除让我印象深刻
作者: scoto263    时间: 2014-11-21 20:29
暴力反射??修改类型??之前好像碰到过此问题。我再找找。
作者: scoto263    时间: 2014-11-21 22:33
嗯。。刚刚我也找到题目做出来了。。那个泛型应该只是在编译的时候起作用,就是存入的不是相同的类型的话会提示,编译不通过,但是在运行的时候时候是加进去就没问题,因为LIST是可以储存不同类型的不同元素的,所以加任何对象都能加进去。

但是如果集合改成TreeSet就不能添加不同类型了,即使反射也会报错,这是由于java运行中的问题。附上代码

11111111111111.png (163.45 KB, 下载次数: 70)

11111111111111.png

作者: sin    时间: 2014-11-21 23:28
关注 反射技术String getClassLoader




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2