2010-02-01 48 views

回答

11
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)
+0

好的代碼。爲什麼要在「對象」類下面一路向上? – fastcodejava 2010-02-01 12:20:36

+2

因爲一般只需要_his_等級。在我更新的答案中,我包含了一個指示如何包含對象方法的項目符號 – Bozho 2010-02-01 12:22:29

3

改爲使用Class.getDeclaredMethods()。請注意,與getMethods()不同,此不會返回返回的繼承方法 - 因此,如果您想要所有內容,則需要對類型層次結構進行遞歸。