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 :

Comment cloner un objet ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Par défaut Comment cloner un objet ?
    Bonjour,

    Quand on fait une affectation, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Integer a,b;
     ...
     a=b
    On affecte une référence. Les deux références a et b pointe vers
    le même objet en mémoire.

    Mon problème est d'avoir une copie de l'objet b que je référence par la
    variable a.

    Je pensai que cela ce faisait ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Integer a,b;
     ...
     a=b.clone();
    J'ai découvert que l'objet Integer n'avait de fonction clone(). Donc comment
    fait-on ?

    Toujours dans le même ordre d'idée. comment code-t-on la fonction clone()
    pour des objet heriter. Exemple :

    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
    32
    33
     
    class A
    {
      public A clone()
      {
         ?
      }
     
      public void fonction_diverse()
      {
         ...
         A a=clone();
       }
     
    }
     
    class B
    extends A
    {
     
      public B clone() 
      {
        ??
      }
     
     
    }
     
    ...
     
    Class B b;
     
    b.fonction_diverses();
    merci

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par rei.uchiwa Voir le message
    J'ai découvert que l'objet Integer n'avait de fonction clone(). Donc comment
    fait-on ?
    Dans ce cas on peut utiliser un constructeur de copie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer a = new Integer(b);
    Citation Envoyé par rei.uchiwa Voir le message
    Toujours dans le même ordre d'idée. comment code-t-on la fonction clone()
    pour des objet heriter.
    Pour utiliser clone() il faut impérativement implémenter Cloneable et utiliser la méthode super.clone(), puis cloner éventuellement des attributs spécifiques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class C {
       protected void clone() throws CloneNotSupportedException {
          Object cloned = super.clone();
     
          // On clone éventuellement les attributs si besoin.
     
          return cloned;
       }
    }
    Il y a deux autres choses que tu peux faire :
    • Passer la méthode en public, afin de pouvoir l'utiliser plus facilement.
    • Traiter la CloneNotSupportedException afin de plus s'embêter avec, en l'encapsulant dans une RuntimeException.
    • Caster l'objet et changer le type de retour, afin de simplifier encore l'utilisation de la méthode...


    Ce qui donne au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class C {
       protected C clone() {
          try {
             C cloned = (C) super.clone();
     
             // On clone éventuellement les attributs si besoin.
     
             return cloned;
          } catch (CloneNotSupportedException e) {
             throw new RuntimeException(e);
          }
       }
    }

    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Par défaut
    merci, pour ces réponses claires.

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

Discussions similaires

  1. Comment cloner un objet ?
    Par toss.net dans le forum C#
    Réponses: 5
    Dernier message: 09/06/2010, 11h28
  2. Cloner un objet : comment créer l'instance ?
    Par phplive dans le forum Langage
    Réponses: 8
    Dernier message: 29/05/2005, 18h27
  3. [C#] Comment cloner en c#
    Par borgfabr dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/04/2004, 12h00
  4. Comment mettre plusieurs objets ds un composant ?
    Par Fleury dans le forum Composants VCL
    Réponses: 7
    Dernier message: 24/05/2003, 17h34
  5. Comment cloner un composant
    Par totoranky dans le forum Composants
    Réponses: 2
    Dernier message: 12/04/2003, 15h29

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