Java renvoie une copie pour masquer les modifications futures
Question
En Java, disons que vous avez une classe qui encapsule un ArrayList
(ou toute collection) d’objets.
Comment renverriez-vous l'un de ces objets de telle sorte que l'appelant ne verra aucune modification future apportée à l'objet effectuée dans ArrayList ?
c'est à dire.vous souhaitez renvoyer une copie complète de l'objet, mais vous ne savez pas s'il est clonable.
La solution
Transformez cela en spécification :
-que les objets ont besoin d’implémenter une interface afin d’être autorisés dans la collection
Quelque chose comme ArrayList<ICloneable>()
Ensuite, vous pouvez être assuré que vous effectuez toujours une copie complète - l'interface doit disposer d'une méthode garantissant le renvoi d'une copie complète.
Je pense que c'est le mieux que vous puissiez faire.
Autres conseils
Une option consiste à utiliser la sérialisation.Voici un article de blog l'expliquant :
http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html
Je suppose que c'est une réponse évidente :
Créez une condition requise pour que les classes stockées dans la collection puissent être clonées.Vous pouvez vérifier cela au moment de l'insertion ou au moment de la récupération, selon ce qui a le plus de sens, et lever une exception.
Ou si l'élément n'est pas clonable, revenez simplement à l'option de retour par référence.