108 votes

Réflexion de Java : Comment savoir si une méthode est statique ?

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.

187voto

Tom Hawtin - tackline Points 82671

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.

14voto

bruno conde Points 28120

Vous pouvez obtenir les méthodes statiques comme ceci :

5voto

Daniel Spiewak Points 30706

Pour étoffer la (bonne) réponse précédente, voici un extrait de code complet qui fait ce que vous voulez (sauf exceptions ignorées) :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X