2011-05-15 115 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)(如果安全管理器允许的话)。