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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘胜寒 于 2013-5-18 03:18 编辑

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;


public class Test4 {

        public static void main(String[] args) throws Exception {
                List list = new ArrayList();
               
                Class<? extends List> clazz = list.getClass();
               
                Method method = clazz.getMethod("add",String.class);
                Object obj = method.invoke("list","123");
                System.out.println(obj);
        }

}
报告的异常:
Exception in thread "main" java.lang.NoSuchMethodException: java.util.ArrayList.add(java.lang.String)
        at java.lang.Class.getMethod(Class.java:1605)
        at Test4.main(Test4.java:13)


抛异常的地方在getMethod方法的第二个参数,第二个参数的字节码应该如何设置?(注明下:
add方法的参数是泛型)

有谁能帮忙修改下,使这段小程序能运行?


点评

楼主我趁这黑夜给你结贴,希望楼主海涵。楼主问题解决了吧。。  发表于 2013-5-18 03:15

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

3 个回复

倒序浏览
真心表示不知道,试了试也不行。学习。。。
回复 使用道具 举报
Object obj = method.invoke("list","123");
楼主的这句话错误了  要么改为  Object obj = method.invoke(list,"123");
但是这样改也没啥意义,我想你的意思应该是 用新定义的clazz类的实例即改成
Object obj = method.invoke(clazz.newInstance(),"123");

然后回到你的问题上来。以下是本人拙见,忘批评指正
由于jdk1.5是兼容jdk1.4的 而泛型是在1.5以后才出现的,所以虚拟机先去找jdk1.4的add方法 发现其参数类型是Objec
所以
Method method = clazz.getMethod("add",Object.class);就可以了

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
乎¤_¤乎 发表于 2013-5-14 13:03
Object obj = method.invoke("list","123");
楼主的这句话错误了  要么改为  Object obj = method.invoke( ...

你这么一提醒,我刚查了API,invoke方法的第一个参数弄错了,原本Object对象,我写的String类型,修改以后可以运行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马