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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

用反射把String字符串放入List<Integer>中可以正确取出,但是用反射把Integer放入List<String>中,取数据时报错,这是为什么?
代码如下:[code=java]package day2;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class GenericTest {
        public static void main(String[] args) throws Exception{
                List<Integer> list = new ArrayList<Integer>();
                Method method = List.class.getMethod("add", Object.class);
                method.invoke(list, "111");
                System.out.println(list.get(0));
               
                List<String> list1 = new ArrayList<String>();
                method.invoke(list1, new Integer(111));
                System.out.println(list1.get(0));
        }
}[/code]

6 个回复

倒序浏览
黑马网友  发表于 2011-10-2 21:39:31
沙发
确实是啊 为什么呢?来个人解答下啊.....
回复 使用道具 举报
黑马网友  发表于 2011-10-2 22:12:46
藤椅
把这句System.out.println(list1.get(0)); 换成
Object obj=list1.get(0);
System.out.println(obj);
就不会出错了。
往String类型集合中存入Integer类型数据后,取出时将它们转换成公有的Object类
原因:执行System.out.println(list.get(0));时内部调用了String.valueof(obj)方法,
      而执行System.out.println(list1.get(0));这句时,由于List指定的是String类型,它便直接输出了,因此报错java.lang.ClassCastException:   java.lang.Integer cannot be cast to java.lang.String

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-10-3 12:59:23
板凳
明白了 ,谢谢
回复 使用道具 举报
黑马网友  发表于 2011-10-3 17:47:49
报纸

回复 藤椅 的帖子

当List<Integer>
method.invoke(list, "111");
存入一个String都可以
当List<String>
method.invoke(list1, new Integer(111));
存入一个Integer就不行
还得请教
可不明白就是
定义集合时的参数类型和存入的数据类型以及取出来的数据类型
它们之间都是什么关系
回复 使用道具 举报
黑马网友  发表于 2011-10-4 12:24:39
地板
不好意思,之前没发现我第二个回复叫  藤椅,所以就略过了
其实泛型只是做给编译器看的,
ArrayList<String> collection1 = new ArrayList<String>();
ArrayList<Integer> collection2 = new ArrayList<Integer>();
System.out.println(collection1.getClass() == collection3.getClass());//这里不是输出true的吗!
所以编译完后,泛型类型就不起作用了,
利用反射是可以存入不同类型数据的,就是取出时会出现问题,
所以取出时最好先进行类型转换,转成公有数据类型,再输出。
回复 使用道具 举报
黑马网友  发表于 2011-10-4 12:54:15
7#

回复 地板 的帖子

反射时不存在类型参数
存什么类型都可以
取出时需要转型  
明白了    谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马