Réponses:
Utilisez 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);
}
Remarque: cette méthode est en fait dangereuse du point de vue de la sécurité. Class.getMethods "contourner [es] les vérifications de SecurityManager en fonction du chargeur de classe de l'appelant immédiat" (voir la section 6 des directives de codage sécurisé Java).
Avertissement: non testé ni même compilé.
La note Modifier
doit être utilisée avec précaution. Les indicateurs représentés par des entiers ne sont pas de type sûr. Une erreur courante consiste à tester un indicateur de modificateur sur un type d'objet de réflexion auquel il ne s'applique pas. Il se peut qu'un drapeau à la même position soit positionné pour indiquer d'autres informations.
Vous pouvez obtenir les méthodes statiques comme ceci:
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
Pour étoffer la réponse précédente (correcte), voici un extrait de code complet qui fait ce que vous voulez (exceptions ignorées):
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()]);
}