当类字节码中的方法需要传入一个数组参数时,需要将数组参数打包为一个整体传入,否则会报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"});
}
}
在Java反射操作中,如果遇到方法需要传入数组作为参数,必须正确处理数组,否则会抛出IllegalArgumentException。解决方法包括将数组包装成Object数组或者直接将数组强转为Object类型。例如,调用一个接受String数组的方法show时,可以使用`me1.invoke(obj, (Object) new String[]{"444", "555", "666"})`这样的方式来传递参数。"
105292241,9352231,Python正则表达式实战:从基础到应用,"['Python', '正则表达式', '字符串处理', '编程实践']

被折叠的 条评论
为什么被折叠?



