Respuestas:
Utilice 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 "omite las comprobaciones de SecurityManager en función del cargador de clases del llamador inmediato" (consulte la sección 6 de las directrices de codificación segura de Java).
Descargo de responsabilidad: no probado ni compilado.
La nota Modifier
debe usarse con cuidado. Las banderas representadas como ints no son seguras para los tipos. Un error común es probar una marca modificadora en un tipo de objeto de reflexión al que no se aplica. Puede darse el caso de que se establezca una bandera en la misma posición para indicar otra información.
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());
}
Para desarrollar la respuesta anterior (correcta), aquí hay un fragmento de código completo que hace lo que usted 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()]);
}