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 () дополнительные усилия по созданию исключений в не клонируемых подклассах кажутся мне тривиальными.
Я что-то пропустил? Любые идеи будут оценены.