有数组参数的方法的反射调用

本文探讨了在Java中使用反射调用不定参数方法时遇到的问题,并提供了两种正确的调用方式。

在反射调用方法时,我们需要通过传入方法调用对象以及方法的实参,在参数有数组类型时,则会存在一定问题,看如下示例:

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"}});







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值