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

Collection et Stream Java Discussion :

Probleme : clonage de tableau d'objets


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2006
    Messages : 53
    Par défaut Probleme : clonage de tableau d'objets
    bonjour a tous,

    je planches depuis déjà un petit moment sur un probleme que je n'arrive pas a resoudre, je vous expose mon probleme si quelqu'un aurait une piste je suis preneur.
    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
     
    			public class MaClass 
    			{
    				   MonObjet [] copy_MonTabObjet;
     
    				   public void test( MonObjet [] MonTabObjet)
    				   {
    					   copy_MonTabObjet = (MonObjet[]) MonTabObjet.clone();
    					   System.out.println("original = "+MonTabObjet[0].MonNom);	
    					   System.out.println("COPY     = "+copy_MonTabObjet[0].MonNom);	
     
    					   copy_MonTabObjet[0].MonNom = "Paulo";
     
    					   System.out.println("original = "+MonTabObjet[0].MonNom);	
    					   System.out.println("COPY     = "+copy_MonTabObjet[0].MonNom);					   
     
     
     
    				   }
     
    			}
    L'execution du code source ci-dessous me donne le resulat suivant :

    original = Sebastien
    COPY = Sebastien
    original = Paulo
    COPY = Paulo

    alors que souhaiterais avoir :

    original = Sebastien
    COPY = Sebastien
    original = Sebastien
    COPY = Paulo

    est-ce quelq'un aurait une idée pour que je puisse disposé d'un "vrai clone" de mon tableau MonTabObjet de fait que je puisse modifier des données dans le tableau cloner sans modifier l'original.

    Merci d'avance pour toute vos suggestions.

    Sébastien

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Je ne crois pas que lorsque tu clone un tableau tous ses éléments le soient aussi (et je pense qu'il en est de même pour la méthode System.arraycopy() ).
    Il va te valoir boucler sur ton tableau pour cloner tes objets un par un .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2006
    Messages : 53
    Par défaut
    dans le cas ou j'ai des variables de type chaine de caracteres cela fonctionne mais si dans ma classe MonObjet j'ai des objets comment je pourrais faire ? (une idée?? je seche ..)

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par sebastien2222
    dans le cas ou j'ai des variables de type chaine de caracteres cela fonctionne mais si dans ma classe MonObjet j'ai des objets comment je pourrais faire ? (une idée?? je seche ..)
    Cela vient d'une mauvaise implémentation du clonage de tes objets.
    En effet, pour les attributs immuables (comme les Strings) il n'y a pas de problème, par contre les attributs non immuables doivent être, eux aussi, clonés.

    [edit] Tu as plus d'informations dans la Javadoc de la méthode clone() [/edit]
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2006
    Messages : 53
    Par défaut
    Cela vient d'une mauvaise implémentation du clonage de tes objets
    peux tu préciser ? je suis pas vraiment un expert (java et objet)

    si dans mon objet MonObjet j'ai un seul et unique objet nommé AutreObjet qui contient lui meme des chaines de caracteres quel serait la solution en terme d'implémentation pour que le clonage fonctionne.

    désolé pour les questions trivial mais je debute dans le "metier".

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par sebastien2222
    si dans mon objet MonObjet j'ai un seul et unique objet nommé AutreObjet qui contient lui meme des chaines de caracteres quel serait la solution en terme d'implémentation pour que le clonage fonctionne.
    Dans la méthode clone() du premier objet tu doit aussi cloner l'attribut qui est un objet (et qui doit donc être Cloneable).

    Voici un exemple :
    Considéront une famille (classe Familly) qui possède plusieurs membres (des personnes, classe Person) qui eux ont un nom et un age. Nous voulons pouvoir cloner une famille et donc que la classe Familly implemente l'interface Cloneable (et donc la méthode clone()).
    Cependant, la famille contient des personnes, il faut donc que la class Person implémente, elle aussi, l'interface Cloneable.

    Person
    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
    public class Person implements Cloneable {
        private String name;
        private int age;
     
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
     
        public Object clone() {
            // on peut utiliser directement les attributs 'name' et
            // 'age' car leurs classes respectives sont immuable
            return new Person(name, age);
        }
    }
    Familly
    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 Familly implements Cloneable {
        private Person father;
        private Person mother;
        private ArrayList<Person> childs;
     
        public Familly(Person father, Person mother, ArrayList<Person> childs) {
            this.father = father;
            this.mother = mother;
            this.childs = childs;
        }
     
        public Object clone() {
            // on doit cloner les attributs 'father', 'mother' et 'childs' 
            // car leurs classes respectives ne sont pas immuables
            return new Familly((Person) father.clone(), (Person) mother.clone(), (ArrayList<Person>) childs.clone());
        }
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 25/04/2007, 11h36
  2. Tableau d'objets
    Par moulefrite dans le forum MFC
    Réponses: 7
    Dernier message: 15/06/2004, 14h14
  3. Sauvegarde / Chargement d'un tableau d'objets
    Par Naruto dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 14h34
  4. [VB6]Tableau d'objet withevents
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2004, 19h44
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

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