Tenir compte l'extrait suivant:En utilisant des méthodes java.lang.reflect.getMethod polymorphes
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()
est évidemment pas au courant qu'un String
pourrait être amenée à une méthode qui attend un Object
(en effet, il est dit que la documentation il recherche méthode avec le nom spécifié et exactement les mêmes types de paramètres formels).
est-il un moyen simple de trouver des méthodes pensivement, comme getMethod()
fait, mais en prenant en compte le polymorphisme, de sorte que l'exemple de réflexion ci-dessus pourrait trouver la méthode print(Object)
lors d'une interrogation avec ("print", String.class)
paramètres?
Je dirige un problème similaire dans http://stackoverflow.com/questions/2169497/unexpected-class-getmethod-behavior et il n'y avait pas moyen de le faire en itérant sur tous les arguments et en appelant isAssignableFrom – Daff