黑马程序员技术交流社区
标题:
使用反射给已定泛型集合添加其他类型元素的问题
[打印本页]
作者:
黑马潘浩
时间:
2013-3-27 11:29
标题:
使用反射给已定泛型集合添加其他类型元素的问题
本帖最后由 黑马潘浩 于 2013-3-28 15:27 编辑
import java.util.ArrayList;
import java.util.List;
public class Demo {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
//第一种
List<String> list = new ArrayList<String>();
list.getClass().getMethod("add", Object.class).invoke(list,1);
System.out.println(String.valueOf(list.get(0)));//为什么这里要调用String.valueOf()方法。
//第二种
List<Integer> list2 = new ArrayList<Integer>();
list2.getClass().getMethod("add", Object.class).invoke(list2,"abc");
System.out.println(list2.get(0));//这可以直接取出元素
}
}
复制代码
如上面的代码,在第一个泛型为String的list的集合中,为该集合添加一个Integer对象,而在取出该对象的时候为什么要调用String.valueOf()方法才能取出,不然就会报错。
而第一个泛型为Integer的list2的集合中,为该集合添加一个String对象,取出时不需要调用任何方法就可以直接打印。问这两者之间的区别?
作者:
itserious
时间:
2013-3-27 12:35
// 第一种
List<String> list = new ArrayList<String>();
//你下面传的参数类型为Object.你
传的int 类型的1,会自动装箱成Integer
list.getClass().getMethod("add", Object.class).invoke(list, 1);
System.out.println(String.valueOf(list.get(0)));// 为什么这里要调用String.valueOf()方法。
//上面要加String.valueOf(),是因为,list.get(0)会返回一个
Integer类型的对象
。
//你想打印它,你就
必须将它转换成字符串
,String String.valueOf(Integer inte),
//这样才可以调用toString 方法打印它
// 第二种
List<Integer> list2 = new ArrayList<Integer>();
//你下面传的参数类型为Object.你传的"abc" ,是字符串,已经是对象了。
list2.getClass().getMethod("add", Object.class).invoke(list2, "abc");
System.out.println(list2.get(0));// 这可以直接取出元素
//上面list2.get(0)的返回值是字符串。所以可以直接调用toString()方法打印。
作者:
黑马潘浩
时间:
2013-3-27 12:42
itserious 发表于 2013-3-27 12:35
// 第一种
List list = new ArrayList();
在第一种的方式中,它为什么一定要转成字符串才能打印呢?这个才是问题的关键。而且Integer对象也是可以直接打印的如以下代码
import java.util.ArrayList;
import java.util.List;
public class Demo {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
List<Integer> list2 = new ArrayList<Integer>();
list2.add(1);
System.out.println(list2.get(0));
}
}
复制代码
既然Integer对象可以直接打印,这里又为什么一定要转成字符串才能打印呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2