Я быстро погуглил по реализации clone () на Java и нашел: http://www.javapractices.com/topic/TopicAction.do?Id=71
Он имеет следующий комментарий:
конструкторы копирования и статические фабричные методы предоставляют альтернативу клонированию, и их намного проще реализовать.
Все, что я хочу сделать, это сделать глубокую копию. Кажется, что реализация clone () имеет большой смысл, но эта статья с высоким рейтингом Google немного меня пугает.
Вот проблемы, которые я заметил:
Конструкторы копирования не работают с универсальными шаблонами.
Вот какой-то псевдокод, который не компилируется.
public class MyClass<T>{
..
public void copyData(T data){
T copy=new T(data);//This isn't going to work.
}
..
}
Пример 1. Использование конструктора копирования в универсальном классе.
Заводские методы не имеют стандартных имен.
Приятно иметь интерфейс для многократно используемого кода.
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 () дополнительные усилия по созданию исключений в неклонируемых подклассах кажутся мне тривиальными.
Я что-то упускаю? Приветствуются любые идеи.