Я швидко погуглив про впровадження clone () в Java і знайшов: http://www.javapractices.com/topic/TopicAction.do?Id=71
У ньому є такий коментар:
конструктори копіювання та статичні фабричні методи забезпечують альтернативу клонуванню та набагато простіші у реалізації.
Все, що я хочу, - зробити глибоку копію. Здається, реалізація clone () має багато сенсу, але ця стаття з високим рейтингом Google змушує мене трохи побоюватися.
Ось проблеми, які я помітив:
Конструктори копіювання не працюють із Generics.
Ось псевдокод, який не компілюється.
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 () додаткові зусилля, спрямовані на створення винятків у неклонованих підкласах, здаються мені тривіальними.
Мені чогось не вистачає? Будь-яке розуміння буде вдячне.