我希望能寫,例如是否可以使用反射從Java類中檢索所有成員,包括私有成員?
Method[] getMethods(Class<?> c)
這將做同樣的事情,現有的
Class.getMethods()
而且還包括私有和保護的方法。任何想法我可以做到這一點?
我希望能寫,例如是否可以使用反射從Java類中檢索所有成員,包括私有成員?
Method[] getMethods(Class<?> c)
這將做同樣的事情,現有的
Class.getMethods()
而且還包括私有和保護的方法。任何想法我可以做到這一點?
public Method[] getMethods(Class<?> c) {
List<Method> methods = new ArrayList<Method>();
while (c != Object.class) {
methods.addAll(Arrays.asList(c.getDeclaredMethods()));
c = c.getSuperclass();
}
return methods.toArray(new Method[methods.size()]);
}
爲了解釋:
getDeclaredMethods
收益由某一類聲明的所有方法,但不是它的超c.getSuperclass()
返回給定類的直接超類Object
,您將獲得所有方法Object
的方法,然後讓條件是while (c != null)
改爲使用Class.getDeclaredMethods()
。請注意,與getMethods()
不同,此不會返回返回的繼承方法 - 因此,如果您想要所有內容,則需要對類型層次結構進行遞歸。
Javadoc documentation描述了所有的細節。
好的代碼。爲什麼要在「對象」類下面一路向上? – fastcodejava 2010-02-01 12:20:36
因爲一般只需要_his_等級。在我更新的答案中,我包含了一個指示如何包含對象方法的項目符號 – Bozho 2010-02-01 12:22:29