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 :

Clone()


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Clone()
    Bonjour, j'aimerais faire une copie d'une ArrayList.
    Le probleme est que la methode clone() me retourne une "shallow copy" donc ce n'est pas une copie en profondeur. comment faire pour que toutes les references des mes objets dans l'arraylist soit different?
    Merci

  2. #2
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Il faut parcourir les données de ton ArrayList initiales et les affecter à la propriétés ArrayList de ton "Shallow clone"

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci , je vais tester..........

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    A chaque fois que tu cloneras un objet, les membres litteraux seront bien des copies dans le clone mais par contre toutes les membres references seront des copies de la reference, pas de l'instance de l'objet lui-meme. Idem les methodes clone des collections qui se contentent d'un clonage leger.

    D'ou l'interet de surcharger clone() pour faire des copies en profondeur (quand c'est necessaire bien sur, parfois la shallow copy etant parfois preferable).

    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
     
    public class A implements Cloneable {
      private ArrayList<B> myList;
     
      /** @inheritdoc 
      */
      @Override public Object clone() throws CloneNotSupportedException {
        A copy = (A)super.clone();
        // Deep copy of myList.
        copy.myList() = new ArrayList<B>(this.myList.size());
        for (B b : this.myList) {
          copy.myList.add((B)b.clone());
        }
        return copy;
      }
      ...
    }
    Si la classe B est elle-meme clonable bien sur. Sinon erreur...

    Sans clonage prodond, this.myList et copy.myList sont en fait la meme instance.

    Un clonage moyen aurait ete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // We copy the list but keep the same instances in both copies.
    copy.myList = new ArrayList<B>(this.myList);
    // or
    //copy.myList = (ArrayList<B>)this.myList.clone();

Discussions similaires

  1. [Ant] Utilisation de la méthode clone()
    Par Shabata dans le forum ANT
    Réponses: 1
    Dernier message: 01/12/2005, 15h01
  2. Réponses: 2
    Dernier message: 29/10/2005, 12h51
  3. Clone Matlab
    Par devmat dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 30/04/2005, 16h44
  4. [VB.NET] DataTable.Clone ne veut rien savoir
    Par anthony70 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/12/2004, 19h57

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