¿clone () vs copia constructor vs método de fábrica?

Hice un google rápido al implementar 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 profunda. Implementar clone () parece tener mucho sentido, pero este artículo altamente calificado en google me da un poco de miedo.

Aquí están los problemas que he notado:

Los constructores de copias no funcionan con Genéricos.

Aquí hay un pseudo-código que no 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 bastante 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: Usar clone () en una clase genérica.

Noté que el clon no es un método estático, pero ¿no sería necesario hacer copias en profundidad de todos los campos protegidos? Cuando implemento clone (), el esfuerzo extra para lanzar excepciones en subclases no clonables me parece trivial.

¿Me estoy perdiendo de algo? Cualquier apreciación sería apreciada.

Respuestas a la pregunta(10)

Su respuesta a la pregunta