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 :

Comment faire de la defensive copie avec un objet de type Collection


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
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Par défaut Comment faire de la defensive copie avec un objet de type Collection
    Bonsoir,

    Ayant un objet de type Collection et voulant en faire une copie pour faire du pattern defensive, je ne sais pas comment faire...

    La méthode clone n'étant pas disponible sur cette classe...


    ex : Collection<Numero> num;

    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Par défaut
    Plop,

    Pour ce qui est de la méthode clone(), certaines collections la supportent (ArrayList, ...).

    Si tu utilises des List, tu peux regarder la méthode Collections.copy.

    Enfin, tu peux tout simplement créer une nouvelle Collection, et ajouter tous les éléments de la collection courante, en itérant simplement dessus.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Par défaut
    Ok, merci

    J’essaie l'itération!

    Pour ce qui est d'utiliser la méthode clone(), je n'y arrive cependant pas...
    Une méthode me renvoyant un objet "Collection".

    Collection<Maire> newcoll = new ArrayList<Maire>();
    clone n'est pas disponible et j'ai bien implémenté Cloneable et surchargé clone()...

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Par défaut
    L'itération est réussie!

    Pensez-tu cependant qu'il y a une possibilité d'utiliser clone() même si l'objet est de type "Collection"?


    Merci d'avance

  5. #5
    Membre expérimenté
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Par défaut
    Je ne suis pas sûr que 'clone' soit la bonne voie à suivre.
    Pour moi, il faut que les objets de la collection implémentent une méthode ou un constructeur de copie défini dans une interface commune.

    Dans ce cas la copie peut être réalisée par exemple comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Collection<Copyable> getNewCopy(Collection<Copyable> c) throws Exception{
        Iterator<Copyable> i = c.iterator();
        Collection c2 = c.getClass().newInstance();
        while (i.hasNext()){
          Copyable o = i.next();
          c2.add(new Copyable(o));
        }
    D'autre avis ?

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Par défaut
    Voici ce que j'ai fait :


    Collection<Copyable> getNewCopy = ...;
    Collection<Copyable> newcoll = new ArrayList<Copyable>();

    Iterator<Copyable> iter = getNewCopy.iterator();
    while(iter.hasNext())
    newcoll.add((Copyable) iter.next());
    J'essaye votre code après manger

  7. #7
    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,


    Le plus simple serait d'utiliser Collections.unmodifiableCollection() ou un dérivé...

    a++

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/07/2006, 13h10
  2. Réponses: 3
    Dernier message: 27/07/2006, 09h17
  3. TIBDataSet comment faire de la mise à jour avec jointure
    Par uluru dans le forum Connexion aux bases de données
    Réponses: 8
    Dernier message: 08/07/2006, 10h09
  4. Comment faire un jeu en réseau avec J2ME ?
    Par Yakurena dans le forum Java ME
    Réponses: 1
    Dernier message: 27/03/2006, 19h09
  5. Comment faire une division par 5 avec les decalages
    Par Zaion dans le forum Assembleur
    Réponses: 7
    Dernier message: 05/11/2004, 17h33

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