2010-02-01 21 views

Respuesta

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

Para explicar:

  • getDeclaredMethods declaraciones de todos los métodos que se declaran por una determinada clase, pero no sus superclases
  • c.getSuperclass() devuelve la superclase inmediata de la clase dada
  • por lo tanto, , reactivando la jerarquía, hasta Object, obtienes todos los métodos
  • en caso de que desee incluir los métodos de Object, entonces que la condición sea while (c != null)
+0

Buen código. ¿Por qué subir todo justo debajo de la clase 'Object'? – fastcodejava

+2

Porque generalmente uno solo quiere _his_ jerarquía. En mi respuesta actualizada, incluí una viñeta que indicaba cómo incluir los métodos Object también – Bozho

3

Use Class.getDeclaredMethods() en su lugar. Tenga en cuenta que a diferencia de getMethods(), este no devolverá los métodos heredados de, por lo que si desea todo, deberá recurrir a la jerarquía de tipos.

Cuestiones relacionadas