Ich möchte NUR zur Laufzeit NUR die statischen Methoden einer Klasse ermitteln. Wie kann ich das tun? Oder wie man zwischen statischen und nicht statischen Methoden unterscheidet.
quelle
Ich möchte NUR zur Laufzeit NUR die statischen Methoden einer Klasse ermitteln. Wie kann ich das tun? Oder wie man zwischen statischen und nicht statischen Methoden unterscheidet.
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:
quelle
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):
quelle