avoir la méthode est un moyen d'obtenir la méthodeName (dans ce cas foo) au moment de l'exécution? strong> P> Je sais Comment obtenir le nom de classe via p> Ceci.getClass (). GetName () p>
blockquote> ou pour obtenir toutes les méthodes publiques via
méthode [] méthodes = ceci.getclass (). getMethods (); code>
Une fois que j'ai le nom de la méthode, les paramètres seront également importants car il pourrait y avoir plusieurs méthodes avec le même nom p> p>
6 Réponses :
La réflexion est une solution. Un autre lent et potentiellement peu fiable Way est avec une trace de pile. StackTraceElement[] trace = Thread.currentThread().getStackTrace();
String name = trace[0].getMethodName();
Pourquoi est-ce peu fiable? Avez-vous un exemple pour l'obtenir par réflexion?
@Martin Dürrmeier - La réflexion est plus impliquée. J'ai ajouté des liens pour des informations sur la méthode Code> GetStackTrace Code> et un manque de fiabilité potentiel.
Merci pour le lien. Pourriez-vous me donner un indice comment le faire par réflexion?
@Martin Dürrrmeier - généralement avec réflexion, vous connaissez le nom de la méthode à l'avance. Utilisation d'un objet code> Classe CODE>, vous pouvez appeler getMethods correspondre> et faire correspondre le nom avec les types d'arguments appropriés pour obtenir une méthode
méthode code>. Découvrez le Javadoc pour
Classe Code>: Java.sun.com/javase/6/docs/api/java/lang/class.html
Je ne suis pas sûr de savoir pourquoi vous devez faire cela, mais vous pouvez toujours créer un En tant que bonus, vous obtenez le tout em> la trace de la pile jusqu'au point d'exécution, pas seulement la méthode d'enceinte immédiatement. P>
neuf lanceur () code> et
getStacktace () code>
, puis requête StackTraceElement.getMethodName () code>
. p>
Questions connexes h3>
Merci! Je crée des observateurs de commonBaseevents à l'écart du nom de classe la méthodeName Voir aussi télécharger.boulder.ibm.com/ibmdl/pub/software/dw/library/...
Jonathon a souligné ce que le Javadoc de 'GetStacktace () "dit" des machines virtuelles peut, dans certaines circonstances, omet un ou plusieurs cadres de pile de la trace de la pile ". Donc, j'essaie de réflexion. Avez-vous une idée de la façon dont il fonctionne via une réflexion?
Vous pouvez duper le nom du code.
// The Annotation Processor will complain if the two method names get out of synch class MyClass { @HardCodedMethodName ( ) void myMethod ( ) { @ HardCodedMethodName // Untried but it seems you should be able to produce an annotation processor that compile time enforces that myname = the method name. String myname = "myMethod" ; ... } }
J'utilise le code comme ce qui suit: Il suffit de quitter le nom de classe + "." partie et voir si cela répond à vos besoins. p> p>
Cette question a été posée il y a des années, mais je pense que cela mériterait de synthétiser les réponses précédentes dans une expression plus simple: malgré sa laideur et les problèmes de fiabilité cités, c'est Nettoyer et peut être facilement utilisé avec log.x () code> Fonctions pour aider au débogage. p> p>
Dupliqué possible de Obtenir le nom de la méthode d'exécution actuelle