Hice una búsqueda rápida en Google sobre la implementación de clone () en Java y encontré: http://www.javapractices.com/topic/TopicAction.do?Id=71
Tiene el siguiente comentario:
Los constructores de copia y los métodos de fábrica estáticos proporcionan una alternativa a la clonación y son mucho más fáciles de implementar.
Todo lo que quiero hacer es hacer una copia en profundidad. Implementar clone () parece tener mucho sentido, pero este artículo altamente clasificado en Google me da un poco de miedo.
Estos son los problemas que noté:
Los constructores de copia no funcionan con genéricos.
Aquí hay un pseudocódigo que no se compilará.
public class MyClass<T>{
..
public void copyData(T data){
T copy=new T(data);//This isn't going to work.
}
..
}
Ejemplo 1: uso de un constructor de copia en una clase genérica.
Los métodos de fábrica no tienen nombres estándar.
Es muy bueno tener una interfaz para código reutilizable.
public class MyClass<T>{
..
public void copyData(T data){
T copy=data.clone();//Throws an exception if the input was not cloneable
}
..
}
Ejemplo 2: uso de clone () en una clase genérica.
Me di cuenta de que la clonación no es un método estático, pero ¿no sería necesario realizar copias profundas de todos los campos protegidos? Al implementar clone (), el esfuerzo adicional para lanzar excepciones en subclases no clonables me parece trivial.
¿Me estoy perdiendo de algo? Se agradecería cualquier información.