IllegalArgumentException bei Aufruf der invoke-Methode, die mit Hilfe von Java-Reflections
Habe ich eine Klasse, die eine Methode hat, wie folgt :-
public void setCurrencyCode(List<String> newCurrencycode){
this.currencycode = newCurrencycode;
}
Ich bin mit Java Relections zum aufrufen dieser Methode wie folgt :-
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() );
}
Jedoch eine Ausnahme ausgelöst, auf die "invoke" nennen :-
java.lang.IllegalArgumentException: Objekt ist eine Instanz der Klasse deklarieren
Irgendwelche Ideen?
Dank
Sarah
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies bedeutet, dass die
value
Objekt übergeben Sie ininvoke
ist nicht eine Instanz der Klasse, auf dem dermethod
definiert ist. Dies ist, weil das erste argument von invoke ist das Objekt auf das machen das nennen, und die folgenden Argumente sind die Parameter an die aufgerufene Methode. (In diesem Fall sieht es aus wie Wert zu sein, muss eine Instanz voncom.xxx.Currency
- was es natürlich nicht ist, weil es einList
.)Da Sie den Aufruf einer nicht-statischen Methode (und werde zu Schwierigkeiten, eine neue Instanz zu erstellen), dann für die reflektierende äquivalent
obj.setCurrencyCode(value)
am Ende der try-block, den Sie hatte anrufen müssenanstelle Ihres aktuellen single-einer-arg rufen.
Sind Sie nicht aufrufen invoke() richtig:
invoke()
erwartet, dass die Ziel-Objekt als ersten parameter, dann werden die Parameter für den Methodenaufruf als die folgenden Parameter (seit java 1.5, es ist ein varargs-parameter)Versuchen Sie dies: