使用反射调用数组参数方法时数据类型为引用类型的时候的invoke方法自动解包的问题

在具有指定参数的方法对象上调用invoke方法对象表示的基础方法。
个别参数自动解包以匹配原始形式参数,原始参考参数和参考参数都需要进行方法调用转换。
比如在以下代码中

class Employee{
    public static void doWork(int...is) {
        System.out.println("doWork被调用:"+Arrays.toString(is));
    }
    public static void doWorkCite(String...is) {
        System.out.println("doWorkCite被调用:"+Arrays.toString(is));
    }
}
public class MethodInvokeArrDemo {
    public static void main(String[] args) throws Exception {
        //数组的元素类型是引用类型
        Method methodCite=clz.getMethod("doWorkCite", String[].class);
        System.out.println(methodCite);
        methodCite.invoke(null, new String[]{"adad","dagfaga","dafa","dafgag"});
    }
}

methodCite.invoke(null, new String[]{"adad","dagfaga","dafa","dafgag"});

这一行代码执行的时候会自动解包为”adad”,”dagfaga”,”dafa”,”dafgag”因此会出现wrong number of arguments
的错误为了避免这种问题的出现我们应该将代码修改为

methodCite.invoke(null,new Object[]{ new String[]{"adad","dagfaga","dafa","dafgag"}});

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值