A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭润生 中级黑马   /  2012-9-5 15:06  /  1338 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 彭润生 于 2012-9-6 09:55 编辑

                             
ArrayList<Integer> al=new ArrayList<Integer>();                              
                               Method add=al.getClass().getMethod("add", Object.class); //这儿为什么可以传一个Object类呢?,为什么可以传一个这样的类,直接弄个String可以吗?                              
                               add.invoke(al, "你好");
System.out.println(al.get(0));
求解,,。
                              

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 编程新手更要学会多查API

查看全部评分

4 个回复

倒序浏览
本帖最后由 袁艳超 于 2012-9-5 15:40 编辑

ArrayList<Integer> al=new ArrayList<Integer>();
//下面这句话就相当于,获取al的add方法的信息,Object.class的位置并不是代表一个类的Class对象,
//它是把add方法的参数类型,按顺序封装成Class数组,在al的add方法上,这儿不可以写成String.class,
//add方法里,参数就是用泛型定义的,其实也就相当于Object
Method add=al.getClass().getMethod("add", Object.class);
add.invoke(al, "你好");  //这句话就相当于,调用al.add("你好")方法

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你参看Class的getMethod方法,里面要求传这样的类
Method getMethod(String name, Class<?>... parameterTypes)
          返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。

表示获取这个类的add方法(并且是传入参数应该为Object的add方法,如时机直接传String是不行的,必须传Class类实例
回复 使用道具 举报
不可以!
编译期不会报错。但是运行期间会报java.lang.NoSuchMethodException;
原因:反射类Method在运行期会去找对应类的方法,如果你写成Method add=al.getClass().getMethod("add", String.class);
则jvm会找ArrayList下面的add(String s)这样的方法,显然ArrayList是不存在这样的方法的。所以会报错。
查看jdk源码就知道ArrayList中只有add(E e),和add(int index, E element)两个重载的方法。当传入的是Object.class会被默认使用
add(E e),也就是add(Object obj)这种方式来执行。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马