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