[英]Java Reflections - invoke method with BigInteger argument
[英]IllegalArgumentException when calling invoke method using Java Reflections
我有一個 class 有一個方法如下: -
public void setCurrencyCode(List<String> newCurrencycode){
this.currencycode = newCurrencycode;
}
我正在使用 Java Reelections 來調用此方法,如下所示:-
try {
List<String> value = new ArrayList<String>();
value.add("GB");
Class<?> clazz = Class.forName( "com.xxx.Currency" );
Object obj = clazz.newInstance();
Class param[] = { List.class };
Method method = obj.getClass().getDeclaredMethod( "setCurrencyCode", param );
method.invoke( value );
} catch(Exception e) {
System.out.println( "Exception : " + e.getMessage() );
}
但是,“調用”調用會引發異常:- java.lang.IllegalArgumentException: object 不是聲明 class 的實例
有任何想法嗎?
謝謝
莎拉
您沒有正確調用invoke() : invoke()
期望目標 object 作為第一個參數,然后方法調用的參數作為以下參數(從 java 1.5 開始,它是一個可變參數)
嘗試這個:
try
{
List<String> value = new ArrayList<String>();
value.add("GB");
Class<?> clazz = Class.forName( "com.xxx.Currency" );
Object obj = clazz.newInstance();
// Since java 1.5, you don't need Class[] for params: it's a varargs now
Method method = clazz.getDeclaredMethod( "setCurrencyCode", List.class ); // you already have a reference to the class - no need for obj.getClass()
method.invoke( obj, value ); // invoke expects the target object, then the parameters
}
catch(Exception e)
{
System.out.println( "Exception : " + e.getMessage() );
}
}
這意味着您傳遞給invoke
的value
object 不是定義該method
的 class 的實例。 這是因為invoke的第一個參數是要調用的object,后面的arguments是被調用方法的參數。 (在這種情況下,它看起來 value 需要是com.xxx.Currency
的實例 - 當然不是,因為它是List
。)
由於您正在調用非靜態方法(並且會遇到創建新實例的麻煩),因此對於obj.setCurrencyCode(value)
的反射等價物,在您的 try 塊結束時,您需要調用
method.invoke(obj, value)
而不是您當前的單個單參數調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.