gpt4 book ai didi

java - 让我的类(class)实现 Cloneable 有什么意义?

转载 作者:IT老高 更新时间:2023-10-28 20:59:18 25 4
gpt4 key购买 nike

我遇到了一些实现 Clonable 的类代码,文档指出:

A class implements the Cloneable interface to indicate to the Object.clone() method that it is legal for that method to make a field-for-field copy of instances of that class. Invoking Object's clone method on an instance that does not implement the Cloneable interface results in the exception CloneNotSupportedException being thrown. By convention, classes that implement this interface should override Object.clone (which is protected) with a public method. See Object.clone() for details on overriding this method. Note that this interface does not contain the clone method. Therefore, it is not possible to clone an object merely by virtue of the fact that it implements this interface. Even if the clone method is invoked reflectively, there is no guarantee that it will succeed.

我不明白实现这个类的意义,正如文档中所说,接口(interface)中没有实现 .clone 方法,我必须实现它。那么为什么要使用这个类呢?为什么我不在我的类中编写一个方法 copyClass 来复制对象而不需要实现这个类?

最佳答案

要实现克隆方法,您只需执行以下操作:

public Object clone() throws CloneNotSupportedException {
return super.clone();
}

如果需要,您当然可以自定义方法以制作更深的副本。

调用 super.clone() 几乎是强制性的,因为除非该类是 final 并且因此不能被覆盖,否则 clone() 方法必须返回一个实例与调用它的对象属于同一类。因此,简单地创建一个新实例并复制状态将适用于此类,但不适用于所有子类。此外,您并不总是可以访问父类(super class)中包含的所有状态。

简而言之,您将 Object 的 protected 克隆方法公开。 Object.clone() 方法所做的第一件事是(这不是真正的代码,但这就是该方法所做的):

if (!(this instanceof Cloneable)) {
throw new CloneNotSupportedException();
}

所以,Cloneable只是一个标记接口(interface),让Object.clone()方法知道它在调用时一定不能抛出异常。

这是 Java 设计最糟糕的部分之一。通常,您应该更喜欢使用复制构造函数而不是使用 clone()

关于java - 让我的类(class)实现 Cloneable 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16507676/

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