J’ai envie de 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.
Réponses
Trop de publicités?Utiliser 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 réellement dangereux d'un point de vue sécurité. Classe.getMethods "bypass[es] SecurityManager contrôles en fonction de l'appelant immédiat du chargeur de classe" (voir la section 6 de la Java secure directives de codage).
Avertissement: Pas testé ou même compilateur.
Note Modifier
doit être utilisé avec précaution. Drapeaux représentés comme des services de renseignements ne sont pas de type sécuritaire. Une erreur commune est de tester un drapeau de modification sur un type de réflexion de l'objet qu'elle ne s'applique pas. Il peut être le cas que d'un indicateur dans la même position pour désigner certaines autres informations.