gpt4 book ai didi

java - Object.clone() 不调用 super.clone() 实际上会产生什么后果?

转载 作者:行者123 更新时间:2023-11-30 07:10:18 24 4
gpt4 key购买 nike

我知道实现 Object#clone() 的约定表明您应该调用 super.clone() 来获取复制的对象。

但我只是想知道如果我不这样做的话会有什么后果。让我们假设这个例子:

class SomeClass implements Cloneable {
private Object someField;

public SomeClass(Object someField) {
this.someField = Object someField;
}

public Object clone() {
return new SomeClass(this.someField);
}
}

我觉得这不对(TM)。如果我想要一些复制构造函数或复制方法,我只会使用它,而不是 Object#clone()

然而,当我在一些遗留代码中偶然发现这一点时,我只是想知道:这真的很危险吗?或者只是创意,但实际上风格很糟糕?

最佳答案

Is this actually dangerous? Or just creative, but actually bad style?

危险在于SomeClass可以被子类化。这意味着子类也必须重写此方法,否则它实际上不会返回相同类型的实例。

另一个潜在的问题是,向 SomeClass 添加了一个可选字段,但您忘记更新 clone() 方法。

如果您使用super.clone(),您就不必担心这些问题。

关于java - Object.clone() 不调用 super.clone() 实际上会产生什么后果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329776/

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