考慮下面的代碼片段:使用java.lang.reflect.getMethod多態方法
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()
顯然是無法察覺到String
可以反饋給需要Object
(的確是一個方法,它的文檔中說,它會使用指定的名稱和完全相同的形式參數類型)查找方法。
有沒有找到方法反思一個簡單的方法,像getMethod()
做,但考慮多態性考慮進去,這樣,當與("print", String.class)
參數查詢上述反射的例子可以找到print(Object)
方法?
我在http://stackoverflow.com/questions/2169497頭類似的問題/ unexpected-class-getmethod-behavior並且沒有辦法繞着所有參數進行迭代並調用isAssignableFrom – Daff 2010-06-21 10:30:45