Betrachten Sie das folgende Snippet:Mit java.lang.reflect.getMethod mit polymorphen Methoden
public class ReflectionTest {
public static void main(String[] args) {
ReflectionTest test = new ReflectionTest();
String object = new String("Hello!");
// 1. String is accepted as an Object
test.print(object);
// 2. The appropriate method is not found with String.class
try {
java.lang.reflect.Method print
= test.getClass().getMethod("print", object.getClass());
print.invoke(test, object);
} catch (Exception ex) {
ex.printStackTrace(); // NoSuchMethodException!
}
}
public void print(Object object) {
System.out.println(object.toString());
}
}
getMethod()
ist offensichtlich nicht bewusst, dass ein String
ein Verfahren zugeführt werden könnte, die eine Object
(in der Tat erwartet, dann ist es Dokumentation sagt, dass es sucht nach Methode mit dem angegebenen Namen und genau die gleichen formalen Parametertypen).
Gibt es eine einfache Möglichkeit, Methoden reflexiv zu finden, wie getMethod()
tut, aber Polymorphismus berücksichtigt, so dass die obige Reflexions Beispiel die print(Object)
Methode, wenn sie mit ("print", String.class)
Parameter abgefragt finden konnten?
I ein ähnliches Problem in http://stackoverflow.com/questions/2169497 Kopf/unexpected-class-getmethod-behavior und es gab keine Möglichkeit, es mit der Iteration über alle Argumente und dem Aufruf von isAssignableFrom zu tun – Daff