Java反射,參數是數組時出現的問題——IllegalArgumentException異常

記錄:肖佳嘉
同步博客:筱某佳同學

最近在寫項目的時候,有一處地方使用到對象數組。起初沒有留意反射的問題,於是調用方法也就直接調用,正常傳參,然後一直報出java.lang.IllegalArgumentException異常,百度上解決問題都是說將jdk和jre改成1.7,但親測不是同一類型問題,無效。

當我將調用方法的參數改爲無參的時候,成功運行。這時候明白是肯定參數方面出現問題,於是着手於參數方面……

最終找到解決方案——在傳參的時候先用一個Object類型將對象進行包裝,直接傳會報錯。

修改後的傳參,正常運行

//調用類
public class Person {
	String name ;
	public void ArrayPrint(String [] s) {
		System.out.println("調用成功");
	}
}
public class Run {
	public static void main(String[] args) throws Exception, SecurityException {
		String [] s = {"1","2"};
		//加載該類進入內存
		Class cla = Class.forName("Test.Person");
		//創建對象
		Object obj = cla.newInstance();
		//獲取方法對象
		Method method = cla.getMethod("ArrayPrint",String[].class);
		method.invoke(obj,new Object[]{s});
	}

修改前的傳參,報出IllegalArgumentException 異常

public class Person {
	String name ;

	public void ArrayPrint(String [] s) {
		System.out.println("調用成功");
	}
}
public class Run {
	public static void main(String[] args) throws Exception, SecurityException {
		String [] s = {"1","2"};
		//加載該類進入內存
		Class cla = Class.forName("Test.Person");
		//創建對象
		Object obj = cla.newInstance();
		//獲取方法對象
		Method method = cla.getMethod("ArrayPrint",String[].class);
		method.invoke(obj,new s);
	}
}

Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at Test.Run.main(Run.java:15)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章