Antworten:
Verwenden Sie 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);
}
Hinweis: Diese Methode ist aus Sicherheitsgründen tatsächlich gefährlich. Class.getMethods "Bypass [es] SecurityManager-Überprüfungen in Abhängigkeit vom Klassenladeprogramm des unmittelbaren Aufrufers" (siehe Abschnitt 6 der Richtlinien für die sichere Java-Codierung).
Haftungsausschluss: Nicht getestet oder sogar kompiliert.
Hinweis Modifier
sollte mit Vorsicht verwendet werden. Als Ints dargestellte Flags sind nicht typsicher. Ein häufiger Fehler besteht darin, ein Modifikatorflag für einen Typ von Reflexionsobjekt zu testen, für den es nicht gilt. Es kann der Fall sein, dass ein Flag an derselben Position gesetzt wird, um andere Informationen anzuzeigen.
Sie können die statischen Methoden wie folgt erhalten:
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
Um die vorherige (richtige) Antwort zu präzisieren, finden Sie hier ein vollständiges Code-Snippet, das das tut, was Sie wollen (Ausnahmen werden ignoriert):
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()]);
}