2008-11-13 17 views

Respuesta

155

Use Modifier.isStatic(method.getModifiers()).

/** 
* Returns the public static methods of a class or interface, 
* including those declared in super classes and interfaces. 
*/ 
public static List<Method> getStaticMethods(Class<?> clazz) { 
    List<Method> methods = new ArrayList<Method>(); 
    for (Method method : clazz.getMethods()) { 
     if (Modifier.isStatic(method.getModifiers())) { 
      methods.add(method); 
     } 
    } 
    return Collections.unmodifiableList(methods); 
} 

Nota: Este método es realmente peligroso desde el punto de vista de la seguridad. Class.getMethods "bypass [es] SecurityManager comprueba en función del cargador de clases del llamante inmediato" (consulte la sección 6 de las pautas de codificación segura de Java).

Descargo de responsabilidad: No se ha probado o compilador.

Nota Modifier se debe utilizar con cuidado. Los indicadores representados como ints no son seguros. Un error común es probar un indicador de modificador en un tipo de objeto de reflexión al que no se aplica. Puede ser que una bandera en la misma posición esté configurada para indicar otra información.

+0

Edite la respuesta: es Modificador en lugar de Modificadores -> Use Modifier.isStatic (method.getModifiers()) Thx for the Answer! – Telcontar

+4

Sí, gracias. Aunque afirmo que el nombre es un mal diseño. El modificador no representa un modificador. Pero luego toda la clase es un mal diseño. Y probablemente también reflexión. –

+0

por cierto, lo mismo también funciona para Fields, que también proporciona un método getModifiers() – Gregor

6

para dar cuerpo a la respuesta anterior (correcto), aquí es un fragmento de código completo, que hace lo que quiere (excepciones ignoradas):

public Method[] getStatics(Class<?> c) { 
    Method[] all = c.getDeclaredMethods() 
    List<Method> back = new ArrayList<Method>(); 

    for (Method m : all) { 
     if (Modifier.isStatic(m.getModifiers())) { 
      back.add(m); 
     } 
    } 

    return back.toArray(new Method[back.size()]); 
} 
13

Usted puede obtener los métodos estáticos como este:

for (Method m : MyClass.class.getMethods()) { 
    if (Modifier.isStatic(m.getModifiers())) 
     System.out.println("Static Method: " + m.getName()); 
} 
Cuestiones relacionadas