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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lkjghvcx@163.co 中级黑马   /  2013-7-30 08:27  /  1356 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lkjghvcx@163.co 于 2013-7-30 09:56 编辑

ArrayList<Integer> list=new ArrayList<Integer>();
Method method=list.getClass().getMethod("add",Object.class);
String str= "添加字符串!";                 //创建字符串
method.invoke(list, str);    //在list上调用add方法,用反射技术

ArrayList<String> list=new ArrayList<String>();
Method method=list.getClass().getMethod("add",Object.class);
Integer i= new Integer(5);               
method.invoke(list, i);    //在list上调用add方法,用反射技术

为何上面的可以,下面的不可以
java.lang.Integer cannot be cast to java.lang.String

取出时有问题 list.get()
第一个取时没问题
下面的有问题



9 个回复

倒序浏览
兄弟代码没总题啊,可以说,泛型只是编译时的限定,你的JRE是什么版本呢1.6以上就不会出问题的
回复 使用道具 举报
你好,根据你说的情况,我测试了你给的代码,两种情况都是可以的,因为java中的泛型只是在编译时期有效,通过反射得到的方法并没有泛型限定的,所以上下两种情况都是可以的
回复 使用道具 举报
哪颗最亮的星星 发表于 2013-7-30 08:45
兄弟代码没总题啊,可以说,泛型只是编译时的限定,你的JRE是什么版本呢1.6以上就不会出问题的 ...

取出时有问题 list.get()
回复 使用道具 举报
taomingking 发表于 2013-7-30 08:46
你好,根据你说的情况,我测试了你给的代码,两种情况都是可以的,因为java中的泛型只是在编译时期有效,通过反 ...

取出时有问题 list.get()
第一个取时没问题
下面的有问题
回复 使用道具 举报
lkjghvcx@163.co 发表于 2013-7-30 09:20
取出时有问题 list.get()

System.out.println((Object)list.get(0));
这样就没问题了
回复 使用道具 举报
for(Iterator it=list.iterator();it.hasNext();)
                {
                        System.out.println((Object)it.next());
                }

这样取也行的
回复 使用道具 举报
哪颗最亮的星星 发表于 2013-7-30 09:43
for(Iterator it=list.iterator();it.hasNext();)
                {
                        System.out.println((Object)it.next());

原来是这样,谢谢!
回复 使用道具 举报
哪颗最亮的星星 发表于 2013-7-30 09:43
for(Iterator it=list.iterator();it.hasNext();)
                {
                        System.out.println((Object)it.next());

那为何上面的那个不用转(Object)
回复 使用道具 举报
lkjghvcx@163.co 发表于 2013-7-30 10:00
那为何上面的那个不用转(Object)

String和String是新兄弟,它们一个妈,当然不用转,Integer和String它们虽然也是兄弟,但不一个妈,Object是它们共同的爹,所以用Object就OK
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马