使用反射調用非公開的方法有時能解決許多問題,如果方法的參數是數組時類型該怎么傳遞呢?這里找到了一種方法記錄一下
實例
比如:
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調用時直接傳一個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)