gpt4 book ai didi

java - 在不调用 super.clone 的情况下覆盖 Clone

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:41 30 4
gpt4 key购买 nike

覆盖 clone 方法,而不实现 Cloneable 接口(interface)并且不调用 super.clone() 是一个好习惯。这样,就不会抛出 CloneNotSupportedException 异常。

考虑这个类:

class Money {

private BigDecimal x ;

public Object clone() {
Money m1 = new Money();
m1.setX(this.x);
return m1;
}

public BigDecimal getX() {
return x;
}

public void setX(BigDecimal x) {
this.x = x;
}

}

这个类不会抛出 CloneNotSupportedException 并且它的工作方式就像一个复制构造函数。

这是个好方法吗?

最佳答案

您有自己的克隆逻辑,您当然知道您的类支持克隆,因此 clone 方法不应抛出 CloneNotSupportedException。因此,在这里调用 super.clone() 会导致您编写样板 try/catch block ,并在其中重新抛出 CloneNotSupportedException AssertionError,显然不会抛出。而这个标记 Cloneable...我认为,Java 的这一部分设计不当。所以我只是忽略文档并手动复制字段。

使用 super.clone() 的唯一两个参数是性能(我想,内部使用的类似 memcpy 的东西)和添加新字段时对错误的持久性。

关于java - 在不调用 super.clone 的情况下覆盖 Clone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20325224/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com