2010-02-01 4 views

Antwort

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()]); 
} 

zu erklären:

  • getDeclaredMethods gibt alle Methoden, die von einer bestimmten Klasse deklariert sind, aber deren Super nicht
  • c.getSuperclass() kehrt die unmittelbare Superklasse der gegebenen Klasse
  • so , rekursiv die Hierarchie, bis Object, erhalten Sie alle Methoden
  • im Fall, dass Sie die Methoden von Object schließen, dann ist die Bedingung while (c != null)
+0

Guter Code. Warum genau unterhalb der Klasse "Object"? – fastcodejava

+2

Weil im Allgemeinen nur _his_ Hierarchie gewünscht wird. In meiner aktualisierten Antwort habe ich eine Aufzählung eingefügt, die angibt, wie die Object-Methoden ebenfalls eingefügt werden – Bozho

3

Verwenden Sie stattdessen Class.getDeclaredMethods(). Beachten Sie, dass im Gegensatz zu getMethods() diese nicht geerbte Methoden zurückgibt - also wenn Sie alles wollen, müssen Sie die Typhierarchie recurse.

Verwandte Themen