黑马程序员技术交流社区

标题: 关于ArrayList通过反射赋值<问题以解决> [打印本页]

作者: 于启会    时间: 2012-8-9 14:20
标题: 关于ArrayList通过反射赋值<问题以解决>
本帖最后由 于启会 于 2012-8-9 15:06 编辑

ArrayList<Integer> arr2=new ArrayList<Integer>();
arr2.add(3);
用反射给它的add方法添加值
arr2.getClass().getMethod("add", Object.class).invoke(arr2, "abc");   
System.out.println(arr2.get(1));
这句话就行,为什么ArrayList<Integer>定义了类型是Integer,通过还能添加String类型呢?
arr2.getClass().getMethod("add",Integer.class).invoke(arr2,2);
System.out.println(arr2.get(1));
用这句话给它赋值却不行呢。



作者: 周世阳    时间: 2012-8-9 14:32
为什么ArrayList<Integer>定义了类型是Integer,通过还能添加String类型呢??
答:因为泛型只存在与编译期,又编译器检查,而字节码里是没有泛型的,在字节码里ArrayList<Integer>就是ArrayList,所以可以赋予任何Object类型或子类型的参数


arr2.getClass().getMethod("add",Integer.class).invoke(arr2,2);
用这句话给它赋值却不行呢。
答:ArrayList没有add(Integer i)对应的方法只有add(Object o),所以getMethod("add",Integer.class)是无法找到add方法返回的,更不能invoke了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2