JavaJava反射,参数为数组

运用反射调用非公开的艺术有时能一蹴而就许多标题,要是艺术的参数是数组时类型该怎么传递呢?那里找到了一种方法记录一下

实例

比如:

class A{
    private void sayHello(String[] names){
        //...
        System.out.println("sayHello invoked");
    } 
}

String[] names = new String[]{"A", "B", "C"};
Method sayHello = A.class.getDeclaredMethod("sayHello", String[].class);
sayHello.setAcess(true);
sayHello.invoke(new A(), new Object[]{names});

此间有三个地点要求专注

  • A.class.getDeclaredMethod时后边的参数是数组,用加[];
  • sayHello.invoke调用时直接传1个String[]实例会报格外,须要重新用Object[]打包一下;

卓殊,相比较奇怪,google后找到地方的化解情势:

java.lang.IllegalArgumentException: argument 1 should have type     java.lang.String[], got java.lang.String
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)

相关文章