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
Discussion :
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
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.
Olivier Pitton
Site personnel : http://site.olivier-pitton.eu.cloudbees.net/
Page Developpez : http://olivier-pitton.developpez.com/
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".
clone n'est pas disponible et j'ai bien implémenté Cloneable et surchargé clone()...Collection<Maire> newcoll = new ArrayList<Maire>();
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![]()
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:D'autre avis ?
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)); }
Voici ce que j'ai fait :
J'essaye votre code après mangerCollection<Copyable> getNewCopy = ...;
Collection<Copyable> newcoll = new ArrayList<Copyable>();
Iterator<Copyable> iter = getNewCopy.iterator();
while(iter.hasNext())
newcoll.add((Copyable) iter.next());![]()
Salut,
Le plus simple serait d'utiliser Collections.unmodifiableCollection() ou un dérivé...
a++
Partager