Partage
  • Partager sur Facebook
  • Partager sur Twitter

Objet égal à un objet

Sujet résolu
    20 décembre 2014 à 12:55:50

    Voila , dans le constructeur de ma structure , j'ai 

    public class P {
    	private Zone zone;
    	private Pos position1;
    	private Pos position0;
    	private static int nbrPers =0;
    	private char caractere;
    	
    public P(Zone zone, char caractere)
    	{
    		this.zone=zone;
    		this.caractere=caractere;
    		this.getNaissance(); // Fonction qui donne la position0 
    		this.position1= position0;
    		nbrPers++;
    	}
    ...

    Le probleme c'est que lorsque après je change ma position1 la positionO change elle aussi oO , je ne comprend pas , le faite de faire this.position1 = position 0; ne les lient pas ensemble quand meme oO? 

     Meme si j'ai resolu mon problème en replacant this.position1=position0; par

    this.position1.setX(position0.getX());
    this.position1.setY(position0.getY());

    Je n'arrive pas a comprendre la différence 

    Merci

    -
    Edité par Shuxxx 20 décembre 2014 à 14:10:15

    • Partager sur Facebook
    • Partager sur Twitter
      20 décembre 2014 à 14:14:17

      Bonjour.

      Quand tu fais 

      this.position1 = position0;

      c'est la référence position0 que tu copies. Tu as besoin de cloner ton objet et non de copier sa référence.

      • Partager sur Facebook
      • Partager sur Twitter
        20 décembre 2014 à 14:25:58

        Merci, je croyais que cela cloner justement l'objet.

        Et comment faire pour cloner un objet?

        -
        Edité par Shuxxx 20 décembre 2014 à 14:26:53

        • Partager sur Facebook
        • Partager sur Twitter
          20 décembre 2014 à 15:44:03

          Je vois trois solutions possibles :

          • rendre Position clonable (un peu fastidieux, faut respecter des conventions)
          • créer un constructeur de copie (équivalent au clonage mais solution préférée par Josh Bloch par rapport au clonage)
          • rendre Position immuable (faut virer les mutateurs et créer un objet pour chaque position)
          • Partager sur Facebook
          • Partager sur Twitter

          Objet égal à un objet

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown