A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 轻松过关 中级黑马   /  2012-12-6 17:14  /  1354 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

张老师在将泛型的时候举了一个例子,证明用反射可以绕过泛型的约束,向集合内存放与反省定义不同的数据,
但像外取值的时候他只实验了,想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));

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

1 个回复

正序浏览
集合中是不能存放基本数据类型的,在jdk1.5之后,如果将基本数据类型加入集合会被强制转为其包装类:这个12会被强制转化成Integer类型的,

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马