仅仅因为Java的Cloneable实现被破坏,并不意味着您不能创建自己的一个。
如果OP的真正目的是创建一个深层克隆,我认为可以创建这样的接口:
public interface Cloneable<T> {
public T getClone();
}
然后使用前面提到的原型构造函数来实现它:
public class AClass implements Cloneable<AClass> {
private int value;
public AClass(int value) {
this.vaue = value;
}
protected AClass(AClass p) {
this(p.getValue());
}
public int getValue() {
return value;
}
public AClass getClone() {
return new AClass(this);
}
}
以及另一个带有AClass对象字段的类:
public class BClass implements Cloneable<BClass> {
private int value;
private AClass a;
public BClass(int value, AClass a) {
this.value = value;
this.a = a;
}
protected BClass(BClass p) {
this(p.getValue(), p.getA().getClone());
}
public int getValue() {
return value;
}
public AClass getA() {
return a;
}
public BClass getClone() {
return new BClass(this);
}
}
这样,您可以轻松地深克隆BClass类的对象,而无需@SuppressWarnings或其他other头的代码。
Cloneable
那么抛出,AssertionError
而不是仅仅抛出一个普通的Error
表达。