黑马程序员技术交流社区

标题: 关于反射的问题 [打印本页]

作者: zhang63    时间: 2014-6-11 10:56
标题: 关于反射的问题
本帖最后由 zhang63 于 2014-6-12 13:59 编辑
  1. ArrayList<Integer> list = new ArrayList<Integer>();
  2.                 Method method = ArrayList.class.getClass().getMethod("add", String.class);
  3.                 System.out.println(method);
复制代码

运行时出现:Exception in thread "main" java.lang.NoSuchMethodException: java.util.ArrayList.add(java.lang.String),求解
作者: shisishishisi    时间: 2014-6-11 14:24
本帖最后由 shisishishisi 于 2014-6-11 14:28 编辑

分析在代码里:
  1. import java.lang.reflect.Method;
  2. import java.util.ArrayList;
  3. public class Test1{
  4.         public static void main(String[] args) throws Exception{
  5.                 ArrayList<Integer> list = new ArrayList<Integer>();
  6.                 list.add(123);
  7.                 //Method method = ArrayList.class.getClass().getMethod("add", String.class);
  8.                 //ArrayList.class已经得到ArrayList这个类的字节码了为何还要getClass?
  9.                 //获得类字节码的3种方式需要再去看看啊。。。。
  10.                 Method method = ArrayList.class.getMethod("add",Object.class);
  11.                 //查看API文档add方法:boolean add(E e);并没有你指定的 add(String s);所以报错说找不到该方法
  12.                 method.invoke(list, "abc");
  13.                 for(Object li : list){
  14.                         System.out.println(li);
  15.                 }
  16.                 //利用反射向集合加入String类型元素,说明泛型只在编译期有效~~
  17.         }
  18. }
复制代码




作者: 郝义涛    时间: 2014-6-11 15:31
应为Object.class,第二行
作者: zhang63    时间: 2014-6-12 13:57
shisishishisi 发表于 2014-6-11 14:24
分析在代码里:

非常感谢,明了了
作者: zhang63    时间: 2014-6-12 13:58
郝义涛 发表于 2014-6-11 15:31
应为Object.class,第二行

对,还多写了getClass()
作者: 郝义涛    时间: 2014-6-12 15:49
zhang63 发表于 2014-6-12 13:58
对,还多写了getClass()

兄台心好细,,




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