java - usar - ¿Cómo puedo verificar si un método es estático usando la reflexión?
jcheckbox java como usar (3)
Quiero descubrir en el tiempo de ejecución ÚNICAMENTE los métodos estáticos de una clase, ¿cómo puedo hacer esto? O bien, cómo diferenciar entre métodos estáticos y no estáticos.
Para completar la respuesta anterior (correcta), aquí hay un fragmento de código completo que hace lo que desea (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()]);
}
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());
}
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 probado o incluso compilado.
Note El Modifier
debe usarse 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.