黑马程序员技术交流社区
标题:
用反射把Integer放入List<String>中,取数据时报错,这是为什么?
[打印本页]
作者:
张文兵
时间:
2012-6-13 14:26
标题:
用反射把Integer放入List<String>中,取数据时报错,这是为什么?
反射把String字符串放入List<Integer>中可以正确取出,但是用反射把Integer放入List<String>中,取数据时报错,这是为什么?
代码如下:;
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));
}
}
作者:
江南
时间:
2012-6-13 14:27
这句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
作者:
郑传庆
时间:
2012-6-13 14:45
像楼上这写:Object obj=list1.get(0);也可以,你也可以自己写一个泛型的转换,自动将Object类型的对象转换成其它类型的对象。就像下面这个也可以得到一样的结果
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));
Object obj = (Object)list1.get(0);
System.out.println(get(list1.get(0)));
}
public static <T>T get(Object obj){//自动将Object类型的对象转换成其它类型的对象
return (T)obj;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2