gpt4 book ai didi

java - 有效Java : Analysis of the clone() method

转载 作者:IT老高 更新时间:2023-10-28 21:04:21 27 4
gpt4 key购买 nike

从 Effective Java 第 11 条(明智地覆盖克隆)中考虑以下内容,其中 Josh Bloch 解释了 clone() 合约的问题。

There are a number of problems with this contract. The provision that “no constructors are called” is too strong. A well-behaved clone method can call constructors to create objects internal to the clone under construction. If the class is final, clone can even return an object created by a constructor.

有人可以通过“如果类是 finalclone 甚至可以返回由构造函数创建的对象”来解释 Josh Bloch 在第一段中所说的内容。这里的finalclone()有什么关系?

最佳答案

这是因为 clone() 的典型实现如下所示:

public class MyClass implements Cloneable {
protected Object clone() {
MyClass cloned = (MyClass) super.clone();
// set additional clone properties here
}
}

通过这种方式,您可以从您的父类(super class)继承克隆行为。很广泛假设 clone() 操作的结果将根据调用它的对象返回正确的实例类型。 IE。 this.getClass()

因此,如果一个类是 final 的,您不必担心调用 super.clone() 的子类并没有得到正确的对象类型。

public class A implements Cloneable {
public Object clone() {
return new A();
}
}


public class B extends A {
public Object clone() {
B b = (B)super.clone(); // <== will throw ClassCastException
}
}

但是,如果 A 是 final 的,没有人可以扩展它,因此使用构造函数是安全的。

关于java - 有效Java : Analysis of the clone() method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11540792/

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