黑马程序员技术交流社区

标题: 泛型和反射的问题 [打印本页]

作者: 轻松过关    时间: 2012-12-6 17:14
标题: 泛型和反射的问题
张老师在将泛型的时候举了一个例子,证明用反射可以绕过泛型的约束,向集合内存放与反省定义不同的数据,
但像外取值的时候他只实验了,想List<Integer>内放入字符串的值,放入后可以成功取出打印,但我试验向List<String>中存放数字的时候,取出的代码报错。Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
        at GenericTest.main(GenericTest.java:21)
为什么?请指教!
代码如下:
List<String> list1=new ArrayList<String>();
                List<Integer> list2=new ArrayList<Integer>();
                System.out.println(list1.getClass()==list2.getClass());
                list2.getClass().getMethod("add", Object.class).invoke(list2, "abc");
//List<Integer>取出字符串打印没问题,
                System.out.println(list2.get(0));
                list1.getClass().getMethod("add", Object.class).invoke(list1, 12);
//List<String>取值报类型转换错误。
                System.out.println(list1.get(0));
作者: 王中利    时间: 2012-12-6 17:26
集合中是不能存放基本数据类型的,在jdk1.5之后,如果将基本数据类型加入集合会被强制转为其包装类:这个12会被强制转化成Integer类型的,




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