天天看點

Java反射,參數為數組

使用反射調用非公開的方法有時能解決許多問題,如果方法的參數是數組時類型該怎麼傳遞呢?這裡找到了一種方法記錄一下

執行個體

比如:

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)           

作者:小文字

出處:http://www.cnblogs.com/avenwu/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.