我只是想通过反射调用普通的方法,其实就是一个很普通很简单的方法调用,但是却报错了,不知道哪里出了问题,代码如下:
public static void test(String[] args){ for (Object str : args) { System.out.println(str); } } public static void invokeMethod(String classFullName,String methodName,String[] args) throws Exception{ Class<?> c = Class.forName(classFullName); Object obj = c.newInstance(); Method method = c.getMethod(methodName, args.getClass()); if(!method.isAccessible()){ method.setAccessible(true); } System.out.println(method); method.invoke(obj, args); } public static void main(String[] args) throws Exception { //testClass(); //printMethods("com.wangbiao.reflection.ReflectionTest"); String[] arguments = new String[]{"Programing Language "," is "," Java"}; invokeMethod("com.wangbiao.reflection.ReflectionTest","test",arguments); }
错误如下:
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 com.wangbiao.reflection.ReflectionTest.invokeMethod(ReflectionTest.java:70)
at com.wangbiao.reflection.ReflectionTest.main(ReflectionTest.java:78)
method.invoke(obj,args);
改成:
method.invoke(obj,(Object)args);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。