反射- 方法传入数组的处理

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当类字节码中的方法需要传入一个数组参数时,需要将数组参数打包为一个整体传入,否则会报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"});

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值