clone () против конструктора копирования против метода фабрики?

Я быстро взглянул на реализацию clone () в Java и обнаружил: http://www.javapractices.com/topic/TopicAction.do?Id=71

Он имеет следующий комментарий:

copy constructors and static factory methods provide an alternative to clone, and are much easier to implement.

Все, что я хочу сделать, это сделать глубокую копию. Реализация clone (), кажется, имеет большой смысл, но эта статья с высоким рейтингом в Google заставляет меня немного бояться.

Вот проблемы, которые я заметил:

Copy constructors don't work with Generics.

Вот некоторый псевдокод, который не будет компилироваться.

public class MyClass<T>{
   ..
   public void copyData(T data){
       T copy=new T(data);//This isn't going to work.    
   }
   ..
}

Пример 1: Использование конструктора копирования в универсальном классе.

Factory methods don't have standard names.

Довольно приятно иметь интерфейс для повторно используемого кода.

public class MyClass<T>{
    ..
    public void copyData(T data){
        T copy=data.clone();//Throws an exception if the input was not cloneable
    }
    ..
}

Пример 2: Использование clone () в универсальном классе.

Я заметил, что клонирование не является статическим методом, но не все ли еще необходимо делать глубокие копии всех защищенных полей? При реализации clone () дополнительные усилия по созданию исключений в не клонируемых подклассах кажутся мне тривиальными.

Я что-то пропустил? Любые идеи будут оценены.

Ответы на вопрос(10)

Ваш ответ на вопрос