Je veux découvrir à l'exécution SEULEMENT les méthodes statiques d'une classe, comment puis-je faire cela? Ou, comment différencier les méthodes statiques et non statiques.Comment puis-je vérifier si une méthode est statique en utilisant la réflexion?
Répondre
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 réellement dangereuse du point de vue de la sécurité. Class.getMethods "bypass [es] SecurityManager vérifie en fonction du chargeur de classe de l'appelant immédiat" (voir la section 6 des instructions de codage sécurisé Java). Clause de non-responsabilité: Non testé ou même compilateur.
Remarque Modifier
doit être utilisé avec précaution. Les drapeaux représentés comme ints ne sont pas de type sécurisé. Une erreur fréquente consiste à tester un indicateur de modification sur un type d'objet de réflexion auquel il ne s'applique pas. Il se peut qu'un drapeau dans la même position soit défini pour indiquer d'autres informations.
Pour étoffer la précédente (correcte) réponse, 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()]);
}
Vous pouvez obtenir les méthodes statiques comme celui-ci:
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
- 1. Appeler une méthode utilisant la réflexion
- 2. Comment vérifier si une méthode python est liée ou non?
- 3. Comment passez-vous les paramètres par ref lorsque vous appelez une méthode statique en utilisant la réflexion?
- 4. Comment vérifier si une session est invalide
- 5. Invoquer la méthode des génériques surchargés en utilisant la réflexion
- 6. Invoquer une méthode utilisant la réflexion sur un objet singleton
- 7. Comment trouver une surcharge générique spécifique en utilisant la réflexion?
- 8. Déterminer si une méthode existe dans une classe statique
- 9. Comment vérifier si une cellule est en lecture seule dans EXCEL en utilisant C#
- 10. Comment vérifier si une application est en debug ou release
- 11. en utilisant d'abord() avec une collection générique par la réflexion
- 12. Vérification Php si une classe statique est déclarée
- 13. Comment vérifier si une page Web est complètement chargée en utilisant javascript
- 14. Comment tester unitairement une méthode statique en utilisant un faux objet pour la dépendance?
- 15. Comment comparer des classes en utilisant la réflexion?
- 16. Déterminer si un type est statique
- 17. utilisant la réflexion pour trouver des interfaces mises en œuvre
- 18. Accès à une méthode statique en C#
- 19. Comment vérifier si un contrôleur existe en utilisant Zend Framework
- 20. Comment appeler la méthode, en utilisant la réflexion, sur un objet instancié?
- 21. Comment vérifier si une valeur donnée est une liste générique?
- 22. Peut-on accéder à une variable de méthode en utilisant la réflexion?
- 23. Comment vérifier si une chaîne est vide dans Emacs Lisp?
- 24. La méthode statique synchronisée est-elle légale en Java?
- 25. Comment vérifier si la session asp est valide?
- 26. vérifier si une chaîne est un double
- 27. Comment vérifier si les cookies sont bloqués en utilisant JavaScript
- 28. Comment vérifier si NetStream est en cours de lecture
- 29. Comment vérifier si l'utilisateur est en mode plein écran dans IE6 en utilisant des scripts?
- 30. Comment vérifier si un processus est en cours d'exécution en utilisant Delphi?
Modifier la réponse: est Modifier au lieu de ModifierS -> Utiliser Modifier.isStatic (method.getModifiers()) Thx pour la réponse! – Telcontar
Ouais, merci. Bien que je prétende que le nom est une mauvaise conception. Le modificateur ne représente pas un modificateur. Mais alors toute la classe est une mauvaise conception. Et probablement la réflexion aussi. –
btw la même chose fonctionne également pour les champs, qui fournissent également une méthode getModifiers() – Gregor