在反射调用方法时,我们需要通过传入方法调用对象以及方法的实参,在参数有数组类型时,则会存在一定问题,看如下示例:
public static void print(String... s){ for (String str : s){ System.out.println(str); } }
以上方法为App类中的一个静态方法,其通过不定参数的形式定义字符串数组形参,当我们采用一般方式进行反射调用时:
则会产生如下错误:Method method = App.class.getMethod("print",String[].class); method.invoke(null, new String[]{"aaa","bbb","ccc"});
正确的调用方式如下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:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.hik.App.main(App.java:18)
或者采用如下方式:Method method = App.class.getMethod("print",String[].class); method.invoke(null, (Object) new String[]{"aaa","bbb","ccc"});
Method method = App.class.getMethod("print",String[].class); method.invoke(null, new Object[]{new String[]{"aaa","bbb","ccc"}});