2011-05-15 111 views
-2
Method[] theMethods = myClass.getMethods(); 
for(Method m : theMethods){ 
... 

} 

數組是否包含該類的所有方法?公共,私人,受保護和全部繼承? 我是否可以訪問所有這些主要是私有的和受保護的?Java反射 - 方法自省

如果沒有,我怎麼能得到一個類的所有方法,也可以訪問所有?

+6

-1對於可通過閱讀javadoc支持的問題 – Bozho 2011-05-15 19:22:42

回答

1

要得到你需要遞歸調用getDeclaredMethods()在類的類的所有方法和所有它的超類。根據您想要使用的內容,您可能需要刪除由於方法重載而可能出現的重複項。

+0

所以getMethods()+ getDeclaredMethods() - 在calss中聲明的公共方法=所有的類方法? – user550413 2011-05-16 16:48:39

+1

'的getMethods()+ getDeclaredMethods()'給你所有公共方法和私有+保護那些在課堂上直接實現,但不是私有和保護方法,那它的超類。 – x4u 2011-05-16 18:29:42

4

Javadoc使這很清楚:

返回包含反射的類或接口的該Class對象表示所有的公共成員方法,包括那些由類或接口和那些聲明的方法對象的數組從超類和超接口繼承。

要獲得非公開方法,請使用getDeclaredMethods

1

API doc

返回包含反映了所有公共 成員的類或 接口由該 Class對象所表示的方法,包括那些由 的類或接口中聲明的方法 對象的數組而那些 從超和 超級繼承。

所以它可以讓你唯一的公共方法。要獲得所有的方法,你必須在類和它的所有超(通過getSuperclass())使用getDeclaredMethods()

爲了調用非公開方法,您可以在Method對象上使用setAccessible(true)(如果安全管理器允許的話)。