为什么我得到Java.lang.IllegalArgumentException:使用Reflection调用varargs方法时参数的数量错误

时间:2018-02-02 07:09:13

标签: java reflection

我在类中有一个方法,如下所示

  class Sample{

    public void doSomething(String ... values) {

      //do something
    }

    public void doSomething(Integer value) {

    }

  }


//other methods
.
.
.

现在我收到了IllegalArgumentException:

下面的参数数量错误
Sample object = new Sample();
Method m = object.getClass().getMethod( "doSomething", String[].class );
String[] arr = {"v1","v2"};
m.invoke( object, arr ) // exception here

2 个答案:

答案 0 :(得分:8)

invoke需要一组参数。

在你的情况下,你有一个类型为array的参数,所以你应该发送一个大小为1的数组,其中包含1个成员,这是第一个(也是唯一的)参数。

像这样:

Sample object = new Sample();
Method m = object.getClass().getMethod( "doSomething", String[].class );
String[] arr = {"v1","v2"};
Object[] methodArgs = new Object[] {arr};
m.invoke( object, methodArgs ); // no exception here

答案 1 :(得分:5)

String数组包裹在Object数组中:

Sample object = new Sample();
Method m = object.getClass().getMethod("doSomething", String[].class);
String[] arr = {"v1", "v2"};
m.invoke(object, new Object[] {arr});