Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cloner objet java

    21 novembre 2014 à 21:43:53

    Bonjour,
    j'essaie de cloner un objet mais apparemment je ne le fais pas comme il faut.
    Voici mon code:
    public class Piece implements Cloneable{
    
    	...
    
    	public Object clone() {
        	Object o = null;
        	try {
          		// On récupère l'instance à renvoyer par l'appel de la 
          		// méthode super.clone()
          		o = super.clone();
        	} catch(CloneNotSupportedException cnse) {
          		// Ne devrait jamais arriver car nous implémentons 
          		// l'interface Cloneable
          		cnse.printStackTrace(System.err);
    	    }
    	    // on renvoie le clone
    	    return o;
      	}
    }

    et j'appel cette méthode comme ceci:
    Piece pieceUsinee = new Piece();
    Piece pieceOld = (Piece) pieceUsinee.clone();

    Normalement je devrais avoir deux objets différents mais chez moi  pieceUsinee et pieceOld  pointent vers le même objet.
    Une modification sur pieceUsinee se répercute sur pieceOld. (Dans le debugger d'eclipse, on peut voir que ces deux variables on le même id)
    Qu'est ce que je dois faire pour réparer sa?
    Merci pour vos réponses.
    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2014 à 1:13:18

      Il faudrait plutôt faire ça

          public Piece clone() {
              Piece p = new Piece();
              try {
                  // ici, clonage des attributs
              } catch(CloneNotSupportedException cnse) {
                  // Ne devrait jamais arriver car nous implémentons
                  // l'interface Cloneable
                  cnse.printStackTrace(System.err);
              }
              // on renvoie le clone
              return p;
          }

      Ou sinon, peut-être mieux, faire un constructeur de copie.

      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2014 à 17:38:19

        Bonsoir.

        Il faut que tu clones les attributs pour avoir une deep copy, car par défaut tu auras une shallow copy.

        Jette un oeil sur le net tu auras des explications.

        • Partager sur Facebook
        • Partager sur Twitter
        Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)

        Cloner objet java

        × 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