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

Langage Java Discussion :

Nom de la fonction d'appel


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Nom de la fonction d'appel
    Bonjour,

    Voilà, j'ai une petite question

    j'ai une fonction "POSTBO" et une fonction "BEFOREBO" qui appelle une fonction1, qui appelle une fonction2 qui appelle une fonction3.

    Dans la fonction3, je voudrai récupérer le nom de la fonction d'appel (=du début), soit "POSTBO" dans un cas ou "BEFOREBO" dans l'autre cas, pour différencier mon traitement.
    Je fais comment ?

    MERCI pour votre aide
    Hélène

  2. #2
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Utilise la reflexion... Je ne jamais vraiment utilisé pour les méthodes, et je ne suis pas sur que c'est possible de faire ce que tu veux (mais je pense que oui )
    Regarde du côté du package java.reflect dans l'API Documention, disponible sur le site de sun.
    Désolé je n'en sais pas plus...
    Bonne chance...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Je crois que c'est pas possible en Java. Tu peux même pas connaitre l'object qui a appelé cette méthode (sauf en le passant en paramètre).

    Ce que tu peux faire c'est rajouter un paramètre de type integer et faire un traitement différent selon sa valeur.

    Mais le plus simple ça reste de faire 2 fonctions puisqu'à la base elles font pas la même chose:-).

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new Exception().getStackTrace()
    mais le mieux serait sans doute de revoir ton design...

  5. #5
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Effectivement, si elle souhaite seulement faire un traitement différent selon la méthode, elle peut simplement rajouter un paramètre boolean qui sera true si c'est BEFOREBO qui a appelé la méthode, ou le contraire si c'est POSTBO.
    Maintenant, si elle veut vraiment connaitre le nom de la méthode, il y a java.reflect.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    La réflexion te permettrait de le faire, mais il faudrait que la méthode 3 ait une référence de l'objet contenant la méthode 1 à partir de laquelle elle a été appelée (getClass().getMethods()). Mais franchement, ce genre de technique est réservé à des cas bien particuliers, es-tu certain(e) d'avoir choisi la solution la plus simple ? Tu risques de t'enfermer dans une logique pour laquelle Java n'offre pas de bon outils, c'est un langage orienté objet.

  7. #7
    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,


    La reflection permet "seulement" de découvrir dynamiquement la structrure des classes, mais en aucun cas de "surveiller" l'exécution du programme...
    La seule solution serait d'analyser le StackTrace comme l'a indiqué dude. Toutefois cela risque de pénaliser les performances de ton applications si tu effectues cela trop souvent...

    a++

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Citation Envoyé par adiGuba
    La reflection permet "seulement" de découvrir dynamiquement la structrure des classes, mais en aucun cas de "surveiller" l'exécution du programme...
    La réflection ne suffirait pas à elle seule en effet
    En fait, il faudrait pousser la logique jusqu'au bout et utiliser un pattern Proxy dans lequel un objet qui a la responsabiliter de "router" les appels de méthodes et qui pourrait conserver un historique. Dans ce cas, l'objet qui veut avoir des informations sur le déroulement du programme devrait donc avoir une référence sur le proxy.

Discussions similaires

  1. Connaitre le nom de la fonction qui l'a appelé
    Par Fr33dom dans le forum VB.NET
    Réponses: 13
    Dernier message: 18/03/2011, 01h10
  2. Nom de la fonction appelant une autre
    Par eliek_9 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/07/2006, 17h20
  3. [Tableaux] Oubli du nom d'une fonction
    Par Ekimasu dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2006, 10h50
  4. DLL: Le nom de la fonction exportée est précédé de "_&a
    Par franckcl dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/12/2005, 12h50
  5. [C#] Récupérer le nom de la fonction courante
    Par lordkoko dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/11/2005, 11h16

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