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
沒有留言:
張貼留言