J'ai étudié que Java passe des références d'objet par valeur et afin de faire une copie locale d'un objet, je peux faire du clonage () ou du constructeur de copie. J'ai également examiné une copie profonde / peu profonde ainsi que plusieurs messages sur le débordement de pile.
Je regarde cet exemple: p> Seuls quelques articles que j'ai lu mentionné ArrayList met en œuvre la clonable, mais ne dit pas vraiment comment créer une copie locale de "liste" si le type est la liste, pas une arracheliste qui ne met pas en œuvre clonable. P> Je peux appeler clone () si "liste" est le type de arraylist. p> mais si le type est la liste, je ne peux pas. p> Dois-je simplement utiliser le constructeur de copie comme ci-dessous pour créer une copie locale pour créer une copie locale ? Quelle est la meilleure façon de faire une copie de "liste"? P>
3 Réponses :
Passer la liste dans le constructeur est probablement le meilleur moyen d'y aller. L'invocation du constructeur lui-même utilisera, dans les coulisses, System.ArrayCopy. Cela détachera donc efficacement la copie locale de la liste transmise à travers le constructeur. P>
Utilisez le constructeur de copie quand vous le pouvez. Si vous étendez une classe qui
Implexes donné tous les problèmes liés à de Efficace Java 2nd édition , point 11. P> clone () code> est obsolète et ne doit pas être utilisé (ni implémenté) dans le nouveau code. P>
Clonable Code>, vous avez peu de choix, mais pour mettre en place une méthode de clone
bien élevée code>. Sinon,
clonable code>, il est prudent de dire que
D'autres interfaces ne doivent pas l'étendre et que les classes conçues pour l'héritage
(Point 17) ne devrait pas la mettre en œuvre. À cause de ses nombreuses lacunes, certaines
Les programmeurs experts choisissent simplement de ne jamais remplacer la méthode code> clone code> et jamais
Pour l'appeler sauf, peut-être, pour copier des tableaux. p>
blockQuote>
Je ne comprends pas. Quels sont tous les "problèmes associés à clonable", et pourquoi sont-ils si mauvais que vous ne devriez même jamais invoquer i> it?
@Russellsilva, jtechies.blogspot.hu/2012/07 / ...
Il semble que vous souhaitiez rendre votre collection non modifiée afin que vous puissiez utiliser collections.unmodifiablelist () code>. p>