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

Java Discussion :

Adresse mémoire Objet


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 52
    Points
    52
    Par défaut Adresse mémoire Objet
    Bonjour,

    J'ai un petit soucis niveau gestion d'adresse d'objet.

    Voici un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    ClassA a = new ClassA() ;  // son id est par exemple 01.
     
    ClassB b = new ClassB() ; // son id est 02.
    Quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a = b.clone(); // id de a devient 03 (un nombre aléatoire).
    Je voudrais que lorsque je réalise le clone(), l'adresse de a reste la même que lorsque celle ci a été initialisé donc 01.
    Elle comporterai le contenu de B sauf que elle garderai la même adresse 01.

    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,


    Ce n'est pas possible, en général clone() crée une nouvelle instance.
    Pourquoi ne pas appliquer à A les valeur de B ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ClassA a = new ClassA() ;  // son id est par exemple 01.
    ClassB b = new ClassB() ;  // son id est par exemple 02.
     
    a.setValeur( b.getValeur() ); // A garde 01 comme ID, et récupère la valeur de B
    // Ou
    a.setValeur( b.getValeur().clone() ); // Si vraiment besoin de cloner

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    Bonjour,

    La méthode clone va créer une nouvelle instance de l'objet. Je ne pense pas que ce soit ce que tu veux faire, d'autant que b.clone() va renvoyer une instance de ClassB et non ClassA...
    Dans ton cas il te faudrait recopier les attributs les uns après les autres avec quelque chose du genre :

    Mathieu

    Edit : grilled

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 52
    Points
    52
    Par défaut Adresse mémoire Objet
    Merci pour vos réponses.

    C'est ce que je veux éviter , recopier tous les attributs d'une classe.

    Car le problème étant que A va s'alimenter d'une donné de B qui celle ci sera instancié vers la fin .

    Ligne 50 : A.setAttribut(B.getAttribut());

    Ligne 150 : B.SetAttribut("XXX').

    Du coup, le A.setAttribut(B.getAttribut()) ne sera pas alimenté par le 'XXX' mais sera à null

  5. #5
    Membre actif Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Points : 205
    Points
    205
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Ligne 50 : A.setAttribut(B.getAttribut());
     
    Ligne 150 : B.SetAttribut("XXX').
     
    Du coup, le A.setAttribut(B.getAttribut()) ne sera pas alimenté par le 'XXX' mais sera à null
    Qu'est ce qui se passe si tu mets la ligne 50 après la 150?

  6. #6
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut
    Slt.
    Les class ClasseA et ClassB sont des classes filles a la class Object, la méthode clone va crée une nouvelle instance (donc nouvelle adresse) en recopier tous les attributs.
    En conservant la même adresse, tu vas travailler sur la même instance, du coup, en modifiant les valeurs des attributs de b, les valeurs des attributs de a seront aussi affectés par ce changement.
    Remarque :
    Des fois, la méthode clone () ne donne pas les résultats es contés, une simple redéfinition de la cette méthode suffi, inutile de définir une nouvelle méthode.
    Bon courage.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/12/2008, 09h19
  2. lire la valeur d'une adresse mémoire
    Par ilimo dans le forum Windows
    Réponses: 17
    Dernier message: 11/04/2006, 16h21
  3. PRoblème d'adresse mémoire
    Par pmboutteau dans le forum Access
    Réponses: 11
    Dernier message: 07/04/2006, 12h00
  4. Réponses: 6
    Dernier message: 19/09/2005, 20h48
  5. Stack OverFlow ou Violation d'adresse - Orienté Objet
    Par JakeGrafton dans le forum Langage
    Réponses: 7
    Dernier message: 31/05/2005, 17h34

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