黑马程序员技术交流社区

标题: 关于方法的反射 参数问题 求教 [打印本页]

作者: 玥夜    时间: 2014-8-26 19:12
标题: 关于方法的反射 参数问题 求教
本帖最后由 玥夜 于 2014-8-26 21:37 编辑
  1. public class Test3 {

  2.         public static void main(String[] args) throws Exception
  3.         {
  4.                 ArrayList<Integer> list = new ArrayList<Integer>();
  5.                 list.add(2);
  6.                 list.add(4);
  7.                
  8.                 Method m = list.getClass().getMethod("add", Object.class);
  9. //                Method m = list.getClass().getMethod("add", String.class);
  10.                 //为毛这样写就是错的呢。。。
  11.          m.invoke(list, "a");
  12.                 System.out.println(list);
  13.         }

  14. }
复制代码

谢谢
作者: 木易在他乡    时间: 2014-8-26 19:24
list不是限定了Integer泛型了吗
作者: @for    时间: 2014-8-26 19:28
本帖最后由 @for 于 2014-8-26 19:43 编辑

可以看看泛型的擦除相关知识点
作者: @for    时间: 2014-8-26 19:33
本帖最后由 @for 于 2014-8-26 19:43 编辑

ArrayList里面的元素是对象元素,Object类型的,虽然你定义了利用泛型规定了list里的元素是Integer类型,但是由于在编译阶段生成了class文件,在class文件中这种泛型的规定被擦除(泛型擦除),里面只接受object类型的量。而用反射获得list方法method,那么method方法add参数类型也应该是Object.class类型,而不是某一具体的Object的子类型。你可以测试那段错误的代码,改成Integer.class也应该是错误的
作者: 玥夜    时间: 2014-8-26 21:36
@for 发表于 2014-8-26 19:33
ArrayList里面的元素是对象元素,Object类型的,虽然你定义了利用泛型规定了list里的元素是Integer类型,但 ...

哦。。。知道了 谢谢你啊
作者: 玥夜    时间: 2014-8-26 21:38
木易在他乡 发表于 2014-8-26 19:24
list不是限定了Integer泛型了吗

这个反射里面的 你可能还没有看到吧




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