当类字节码中的方法需要传入一个数组参数时,需要将数组参数打包为一个整体传入,否则会报java.lang.IllegalArgumentException: wrong number of arguments错误。
例如:
方法
public void show(String[] strs){
for(String s :strs){
System.out.println(“show :” +s);
}
}
在调用时则需要处理传入的数组参数为一整体
me1.invoke(obj, (Object) new String[]{“444”, “555”, “666”});
此处解决方法有两种:
第一:将数组打包为Object[] ,该数组的第一个元素是传入的数组参数
第二:将参数数组强转为Object
详细见例子:
package cn.itcast_03;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MainMethodDemo {
public static void main(String[] args) throws ClassNotFoundException,
NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException,
InstantiationException {
String className = args[0];//字节码文件的类名由参数传入
Class cls = Class.forName(className);
Object obj = cls.newInstance();
Method mainMethod = cls.getMethod("main", String[].class);
// java.lang.IllegalArgumentException :wrong number of arguments
// mainMethod.invoke(null, new String[]{"111","222","333"});
// 解决方法
// 把数组打包为Object[]
mainMethod.invoke(null, new Object[] { new String[] { "111", "222",
"333" } });
// 把数组强制转为Object
mainMethod.invoke(null, (Object) new String[] { "111", "222", "333" });
Method me1 = cls.getMethod("show", String[].class);
// java.lang.IllegalArgumentException: wrong number of arguments
//me1.invoke(obj, new String[] { "444", "555", "666" });
me1.invoke(obj, (Object) new String[]{"444", "555", "666"});
}
}