Как вы видите, если класс пытается реализовать Cloneable
и вам нужен клон deep , то все составляющие его объекты должны быть неизменяемыми, примитивными или также должны быть Cloneable. 1004 *
Часто лучший и простой подход - создать конструктор копирования.
public class Scope<C extends Comparable<C>> implements Comparable<Scope<C>>, Serializable {
private C starts;
private C ends;
public Scope(final Scope original) {
starts = new C(original.starts);
ends = new C(original.ends);
// initialize all my other fields from "original"
}
}
и, конечно, вам нужен конструктор копирования на C
, способный обрабатывать полиморфизм.
Если у вас нет доступа или возможности изменить источник на C
, то любой метод копирования, независимо от того, какой это метод, будет очень сложным и потенциально невозможным. Например, невозможно сделать копию экземпляра enum
.