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 :

Connaitre l'objet appelant


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Connaitre l'objet appelant
    Voici mon probleme

    J'ai un objet de type A qui creer un objet de type B .
    Une methode de B a besoin de savoir qui l'a appelé (autrement dit il a besoin d'une reference sur l'objet A qui l'a creer .)

    Ma question y a t'il une methode qui permet d'avoir une reference sur l'objet qui a creer un objet , sans que A se donne lui meme en reference via une methode de B. Autrement dit je veux pas de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void setAppellant(A monparent){ 
    mon_appelant=monparent;
    }
    Ni modifier mon constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public B(A appelant){
    mon_appelant=appelant;
    }
    Autrement une methode qui ressemblerait à ca existe t'elle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_appelant=mon_objet_b.getParent();
    Merci

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Je ne connais pas de moyen simple de faire ce que tu demandes; La question est "pourquoi as-tu besoin de faire cela ?"

    A+
    K

  3. #3
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Voici un exemple de ce que tu peux faire, je ne sais pas si il y a un moyen plus facile de le faire. C'est un peu lourd de générer une Exception, surtout en fonction de l'endroit où tu te trouves dans ta hierarchie d'appels; Plus tu es loin, plus la création de la StackTrace sera longue !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    package mypackage;
     
    public class TestCallingClass {
     
    	public static void main(String[] args) {
    		A a = new A();
    		a.uneMethode();
    	}
     
    }
     
    class A {
    	void uneMethode() {
    		B b = new B();
    		b.calledMethod();
    	}
    }
     
    class B {
    	void calledMethod() {
    		System.out.println("Méthode appellée !");
    		Exception e = new Exception();
    		StackTraceElement[] elements = e.getStackTrace();
    		StackTraceElement parentCallingElement = elements[1];
     
    		System.out.println("Classe appellante : " + parentCallingElement.getClassName());
    		System.out.println("Méthode appellante : " + parentCallingElement.getMethodName());
    		System.out.println("Ligne concernée : " + parentCallingElement.getLineNumber());
     
    	}
    }
    K

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Le probleme avec ta solution c'est que ca donne pas de reference sur l'objet a directement , mais je vais regarder la javadoc de StackTrace .
    Pour repondre à pourquoi ai je besoin de faire ca , c'est pour lié un moteur de jeu et un moteur graphique ensemble , et j'aimerai que les action et mouse listener que j'utilise dans l'interface graphique previnnent directement ma class servant d'interface entre mes deux moteurs . Donc j'ai besoin de la reference sur mon objet interface qui implements mouselistener pour le donner comme objet à prevenir en cas d'evenement . Ca me parait mieux que d'utiliser plein de boucle while et des booleans.

    EDIT: J'ai rien trouver d'interessant dans StackTrace .

  5. #5
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Citation Envoyé par aurelien94
    Le probleme avec ta solution c'est que ca donne pas de reference sur l'objet a directement , mais je vais regarder la javadoc de StackTrace .
    Pour repondre à pourquoi ai je besoin de faire ca , c'est pour lié un moteur de jeu et un moteur graphique ensemble , et j'aimerai que les action et mouse listener que j'utilise dans l'interface graphique previnnent directement ma class servant d'interface entre mes deux moteurs . Donc j'ai besoin de la reference sur mon objet interface qui implements mouselistener pour le donner comme objet à prevenir en cas d'evenement . Ca me parait mieux que d'utiliser plein de boucle while et des booleans.
    Le mieux reste quand même selon moi de passer l'objet dans la méthode, en implémentant une Interface commune à tes objets interface, afin que si tu as besoin d'appeler des méthodes sur ceux-ci, tu puisses le faire uniformément quelque soit l'objet appelant..

    Obtenir une référence sur l'objet appellant, je ne pense pas que ce soit possible, sans le passer en argument... Il te reste la solution de mettre en place un controlleur, qui ferait les relations directement entre tes objets lors de leur instanciation. Ainsi, tu n'aurais plus besoin de passer de référence dans tes méthodes.

    A+
    K

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Je vais le passer par methode finalement.Je voulais le faire sans , je pensais qu'il existait peut etre un moyen simple de faire ca mais apparement non

    Merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connaitre l'instance de l'objet appelant
    Par dancingmad dans le forum Langage
    Réponses: 9
    Dernier message: 28/01/2009, 00h13
  2. Connaitre l'objet qui à appellé le ContextMenuStrip
    Par chris81 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 23/05/2008, 12h38
  3. [DOM] connaitre l'objet DOM appelant une fonction javascript
    Par HPmeteo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/09/2007, 18h03
  4. Réponses: 13
    Dernier message: 20/03/2006, 14h31
  5. base de données objet appelée ozone
    Par enti dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 01/03/2004, 08h28

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