Bonjour,
J'ai 2 classes A et B qui appellent une méthode dans une classe C, j'aimerais connaitre dynamiquement laquelle des 2 classe A ou B qui a appelé cette méthode !
Merci d'avance.
Bonjour,
J'ai 2 classes A et B qui appellent une méthode dans une classe C, j'aimerais connaitre dynamiquement laquelle des 2 classe A ou B qui a appelé cette méthode !
Merci d'avance.
Bonjour, le plus simple, serait d'utiliser le polymorphisme, faire 2 méthodes avec le même nom mais qui prenne des paramètres différents.
Est-ce que ça réponds à ton besoin?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class C { maMethode(A a) {} maMethode(B b) {} }
Merci pour la réponse mais c'est pas ça ce que je voulais dire; en fait je veux juste connaitre à quelle Classe appartient la classe appelante , et l'exemple avec les classes A et B n'est qu'un exemple pour simplifier, en réalité j'ai plusieurs méthodes et plusieurs classes !! Merci.
y'as t'il une méthode ou une classe dans le package : java.lang.reflect qui permet de faire ce genre d'introspection ?
Je ne crois pas que cela existe. De ce que j'en connais (pas grand chose je le reconnais) ce package est fait pour appeler de façon dynamique des classes, méthodes ou attributs, mais pas pour savoir qui a appelé la méthode courante.
Par contre je viens de retrouver ce que j'avais fait pour identifier le nom de la méthode appelant une méthode. En modifiant le level et getMethodName en getClassName, cela devrait fonctionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public static String getCallingMethod() { return trace(Thread.currentThread().getStackTrace(), 2); } private static String trace(StackTraceElement[] e, int level) { if(e != null && e.length >= level) { StackTraceElement s = e[level]; if(s != null) { return s.getMethodName(); } } return null; }
Tu peux regarder dans la stack d'appel du Thread courant. Mais ne le fait pas trop souvent car les performances vont vite dégringoler.
Par curiosité : pourquoi as-tu besoin de connaitre l'objet appelant ?
Par curiosité, pourquoi cela dégrade les performances?
en fait j'ai une méthode qui persiste des données parmi les données persister il y a le id user qui effectue la persistance; le problème c'est que des fois cette méthode est déclencher par trigger Quartz et du coup je n'ai plus d'ID user , et si j'essaye de le persister j'ai un NullPointerException ...voilà!
Salut,
Ce qui est couteux c'est la génération du stacktrace (qui contient toute la pile d'appel de l'exécution). Si c'est effectué plusieurs fois dans une boucle cela peut fortement se ressentir...
La question serait plutôt : Pourquoi as-tu besoin de connaitre la classe appelante ?
a++
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager