Je souhaite découvrir au moment de l'exécution UNIQUEMENT les méthodes statiques d'une classe, comment puis-je faire cela? Ou, comment faire la différence entre les méthodes statiques et non statiques.
la source
Je souhaite découvrir au moment de l'exécution UNIQUEMENT les méthodes statiques d'une classe, comment puis-je faire cela? Ou, comment faire la différence entre les méthodes statiques et non statiques.
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:
la source
Pour étoffer la réponse précédente (correcte), voici un extrait de code complet qui fait ce que vous voulez (exceptions ignorées):
la source