Java 反射(reflection) Class.getMethods() 與 Class.getDeclaredMethods() 的差別如下。
getMethods()僅能回傳public方法,但也能回傳繼承來的方法,也就是父類別的方法,當然也必須是public的方法。
getDeclaredMethods()能回傳此類別所宣告的所有方法,包括private,default,protected等,但不能回傳繼承來的方法,也就是不能回傳父類別中的任何方法。
例如下面Foo、Bar類別中有不同存取範圍的方法,且Foo繼承Bar。
Bar
class Bar {
public void barPublicMethod() {}
protected void barProtectedMethod() {}
void barDefaultMethod() {}
private void barPrivateMethod() {}
}
Foo
class Foo extends Bar {
public void fooPublicMehtod() {}
protected void fooProtectedMethod() {}
void fooDefaultMethod() {}
private void fooPrivateMethod() {}
}
測試getMethods()和getDeclaredMethods()取得的方法。
Main
public class Main {
public static void main(String[] arges) {
Class fooClass = Foo.class;
Method[] fooMethods = fooClass.getMethods();
for (Method method : fooMethods) {
System.out.println(method.getName());
}
System.out.println("=====================================");
Method[] declaredFooMethods = fooClass.getDeclaredMethods();
for (Method method : declaredFooMethods) {
System.out.println(method.getName());
}
}
}
印出結果如下。
fooPublicMehtod
barPublicMethod
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
=====================================
fooPublicMehtod
fooProtectedMethod
fooDefaultMethod
fooPrivateMethod
沒有留言:
張貼留言