Comment puis-je clone ArrayList mais également cloner ses objets en Java 1.5 ?
Par exemple j’ai :
Et je m’attends que les objets dans clonedList ne sont pas les mêmes que dans liste de chiens.
Merci pour toute réponse !
Comment puis-je clone ArrayList mais également cloner ses objets en Java 1.5 ?
Par exemple j’ai :
Et je m’attends que les objets dans clonedList ne sont pas les mêmes que dans liste de chiens.
Merci pour toute réponse !
J’ai, personnellement, ajoutez un constructeur au chien :
Alors juste une itération (comme indiqué dans la réponse de Varkhan) :
Selon moi, que l’avantage de ceci est qu'il ne faut pas Glander avec les trucs Cloneable cassé en Java. Il correspond également à la manière que vous copiiez collections Java.
Une autre option pourrait consister à écrire votre propre interface ICloneable et l’utiliser. De cette façon, vous pourriez écrire une méthode générique pour le clonage.
Tous les types de collections de copier des constructeurs. Les utiliser.
List<Double> original = // some list
List<Double> copy = new ArrayList<Double>(original);
clone()
a été conçu avec plusieurs erreurs (voir cette question), il est donc préférable de l'éviter.
De Efficace Java 2nd Edition, Point 11: Remplacer clone judicieusement
Compte tenu de tous les problèmes associés à Clonable, il est sûr de dire autres interfaces ne devrait pas s'étendre, et que les classes conçu pour la succession (Article 17) ne devrait pas la mettre en œuvre. En raison de ses nombreuses lacunes, certains programmeurs experts choisissent simplement de ne jamais remplacer la méthode clone et de ne jamais faire valoir, sauf, peut-être, à copier des tableaux. Si vous créez une classe pour l'héritage, sachez que si vous choisissez de ne pas fournir une sage protégé méthode clone, il sera impossible pour les sous-classes pour mettre en œuvre Clonable.
Ce livre décrit également les nombreux avantages de copier les constructeurs ont plus de Clonable/cloner.
Prenons un autre avantage de l'utilisation de la copie constructeurs: Supposons que vous avez un HashSet s
, et que vous voulez copier en tant que TreeSet
. La méthode clone ne peut pas offrir cette fonctionnalité, mais il est facile, avec une conversion constructeur: new TreeSet(s)
.
Je pense que le courant vert réponse est mauvaise , pourquoi me demanderez-vous?
La façon la sérialisation est aussi mauvais de l'omi, vous pourriez avoir à ajouter Serializable tous sur la place.
Quelle est donc la solution:
Java Profonde-Clonage de la bibliothèque Le clonage de la bibliothèque est un petit open source (licence apache) bibliothèque java qui profonde clones objets. Les objets n'ont pas à mettre en œuvre les Clonable interface. Effectivelly, cette bibliothèque peut cloner un des objets java. Il peut être utilisé à-d. dans les implémentations de cache si vous ne voulez pas l'objet mis en cache à être modifiés ou chaque fois que vous voulez créer une copie en profondeur des objets.
Cloner cloner=new Cloner();
XX clone = cloner.deepClone(someObjectOfTypeXX);
Consultez-le à l' http://code.google.com/p/cloning/
Vous devez cloner l’instance ArrayList à la main (par itération sur elle et en copiant chaque élément un new ArrayList), parce que clone() ne le fera pas pour vous. Raison de ceci est que les objets contenus dans ArrayList ne peuvent pas implémenter Clonable eux-mêmes.
Edit:... et c’est exactement de code de ce Varkhan.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.