Verwendung von java.lang.reflect.getMethod mit polymorphen Methoden

8

Betrachten Sie das folgende Snippet:

%Vor%

getMethod() ist sich offensichtlich nicht bewusst, dass eine String einer Methode zugeführt werden könnte, die Object erwartet (tatsächlich heißt es in der Dokumentation, dass sie nach der Methode mit dem angegebenen Namen und genau dem gleichen formalen Parameter sucht Typen ).

Gibt es eine direkte Methode, um Methoden wie getMethod() reflektiv zu finden, aber unter Berücksichtigung von Polymorphie, so dass das obige Beispiel die print(Object) -Methode finden könnte, wenn sie mit ("print", String.class) -Parametern abgefragt wird?

    
Joonas Pulakka 21.06.2010, 10:17
quelle

3 Antworten

8

Das Reflektions-Tutorial

schlagen die Verwendung von Class.isAssignableFrom() sample zum Auffinden von print(String)

vor %Vor%     
stacker 21.06.2010, 10:28
quelle
1

Der einfachste Weg dazu ist java.beans.Statement oder java.beans.Expression. Macht all diese harten Werften für Sie.

  

getMethod () ist sich das offensichtlich nicht bewusst   Ein String könnte einer Methode zugeführt werden   das erwartet ein Objekt

"Unaware" ist eine seltsame Art, es zu sagen. getMethod() entspricht seiner Spezifikation. Sie müssen die formalen Parameter angeben, nicht die Typen der tatsächlichen Argumente.

    
EJP 23.06.2010 04:16
quelle
1

%Vor%

Beispielverwendung:

%Vor%

Für die Methode invoke(Object invoker, String methodName, Object[] parameters) ist es jedoch möglich, eine falsche Methode aufzurufen, wenn die Signatur nicht eindeutig ist. Zum Beispiel, wenn es zwei Methoden für den Aufrufer gibt:

%Vor%

Das Übergeben des folgenden Parameters kann falsche Methode

aufrufen %Vor%     
Michael W. 01.08.2015 18:49
quelle

Tags und Links