IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[Reflection] Comment connaitre le nom de la classe qui appelle une méthode?


Sujet :

API standards et tierces Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut [Reflection] Comment connaitre le nom de la classe qui appelle une méthode?
    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.

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    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.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class C {
        maMethode(A a) {}
        maMethode(B b) {}
    }
    Est-ce que ça réponds à ton besoin?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    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.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    y'as t'il une méthode ou une classe dans le package : java.lang.reflect qui permet de faire ce genre d'introspection ?

  5. #5
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    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;
        }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    Merci beaucoup !!!

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    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 ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  8. #8
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Par curiosité, pourquoi cela dégrade les performances?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    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à!

  10. #10
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par morph41 Voir le message
    Par curiosité, pourquoi cela dégrade les performances?
    Techniquement, je ne sais pas. Mais les tests disent que c'est lent

    Citation Envoyé par framus.class Voir le message
    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à!
    Tu devrais plutôt revoir ta conception.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Tu devrais plutôt revoir ta conception.
    Qu'est-ce que tu propose ????????????????

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par morph41 Voir le message
    Par curiosité, pourquoi cela dégrade les performances?
    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...

    Citation Envoyé par framus.class Voir le message
    Citation Envoyé par dinobogan Voir le message
    Tu devrais plutôt revoir ta conception.
    Qu'est-ce que tu propose ????????????????
    La question serait plutôt : Pourquoi as-tu besoin de connaitre la classe appelante ?

    a++

Discussions similaires

  1. Nom de la class qui appelle la Servlet
    Par zangets dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/09/2010, 00h25
  2. [Introspection] Savoir quelle classe a appelé une méthode
    Par muad'dib dans le forum Général Java
    Réponses: 2
    Dernier message: 26/11/2008, 16h34
  3. [Runtime class loading] Appeler une méthode qui n'existe pas
    Par Invité dans le forum Général Java
    Réponses: 14
    Dernier message: 27/06/2008, 08h48
  4. Réponses: 8
    Dernier message: 02/06/2008, 11h56
  5. Demander à une classe l'appel à une méthode
    Par sliderman dans le forum Langage
    Réponses: 3
    Dernier message: 22/01/2008, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo