专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > J2SE

对于java反射的invoke方法报错

发布时间:2010-06-05 05:30:51 文章来源:www.iduyao.cn 采编人员:星星草
关于java反射的invoke方法报错
Java code
public void invokeMethod(Object owner)throws Exception{
        Class obj = owner.getClass();
        Method[] me = obj.getDeclaredMethods();
        for(Method object : me){
            object.setAccessible(true);
            Class [] param= object.getParameterTypes();
            if (param.length != 0) {
                object.invoke(owner, (Object)param);
            }else{
                object.invoke(owner);
            }
        }
    }


以上是我的解析方法,IDE报错为:
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at JavaReflection.JavaReflection.invokeMethod(JavaReflection.java:43)
at JavaReflection.JavaReflection.main(JavaReflection.java:82)

------解决方案--------------------
你根本搞错方法的意思

Class [] param= object.getParameterTypes();
这里返回的是这个方法所需要的参数类型列表


object.invoke(owner, (Object)param);
这里要传递的是这个方法的参数值!不是类型

例如有一个方法public void a(int x, String y);

Class[] param <==> {int.class, String.class}

而在invoke的时候你需要传递的是实际的值!例如invoke(owner, new Object[]{1, "xyz"});这样
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: