这种使用clone
的方式是否正确?我每次都会收到运行时错误。任何人都可以建议在这个类中编写复制构造函数的方法吗?
public class Pair {
final StringBuffer x;
final StringBuffer y;
public Pair(StringBuffer x, StringBuffer y) {
this.x = x;
this.y = y;
}
public StringBuffer getX() {
return x;
}
public StringBuffer getY() {
return y;
}
public Pair clone() {
Pair p = new Pair(new StringBuffer(), new StringBuffer());
try {
p = (Pair) super.clone();
} catch (CloneNotSupportedException e) {
throw new Error();
}
return p;
}
}
答案 0 :(得分:3)
复制构造函数:
public Pair(Pair other) {
this.x = new StringBuffer(other.x.toString());
this.y = new StringBuffer(other.y.toString());
}
clone
在所有情况下正确实施都非常棘手,几乎到了病态- 复制对象的重要性将始终保持,因为对象字段通常需要进行防御性复制
- 复制构造函数和静态工厂方法提供了克隆的替代方法,并且更容易实现