Copia de devolución de Java para ocultar cambios futuros
Pregunta
En Java, digamos que tiene una clase que envuelve un ArrayList
(o cualquier colección) de objetos.
¿Cómo devolvería uno de esos objetos de modo que la persona que llama no vea ningún cambio futuro en el objeto realizado en ArrayList?
es decir.desea devolver una copia profunda del objeto, pero no sabe si se puede clonar.
Solución
Convierta eso en una especificación:
-Ese objetos deben implementar una interfaz para que se permita en la colección algo así como ArrayList<ICloneable>()
Entonces puede estar seguro de que siempre realizará una copia profunda: la interfaz debe tener un método que garantice que devolverá una copia profunda.
Creo que eso es lo mejor que puedes hacer.
Otros consejos
Una opción es utilizar la serialización.Aquí hay una publicación de blog que lo explica:
http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html
Supongo que es una respuesta obvia:
Haga un requisito para que las clases almacenadas en la colección sean clonables.Puede comprobarlo en el momento de la inserción o en el momento de la recuperación, lo que tenga más sentido, y lanzar una excepción.
O si el artículo no se puede clonar, simplemente vuelva a la opción de devolución por referencia.