7

实现可克隆接口有什么用,因为它是标记接口?

我总是可以在我的类中创建一个公共 Object clone() 方法。可克隆接口的实际目的是什么?

4

5 回答 5

7

那是因为clone()如果CloneNotSupportedException您的对象不是Cloneable.

您应该查看方法的文档clone()

以下是clone()在类中声明方法的方式Object

protected Object clone() throws CloneNotSupportedException

笔记:

此外,它已经意识到它Clone被打破了。SO中的这个答案解释了为什么以及如何避免使用它。

于 2012-07-14T06:21:42.570 回答
4

制作Cloneable标记界面是一个错误。

也就是说,它所做的一件事是“启用” clone()in的默认实现Object。如果你不这样做,implement Cloneable那么调用super.clone()将抛出一个CloneNotSupportedException.

于 2012-07-14T06:22:14.053 回答
2

有人说这是从 C++ 中模仿复制构造函数的尝试,但这是 StackOverflow 上关于它的先前类似问题:About Java cloneable

于 2012-07-14T06:23:11.893 回答
2

目的在javadoc中指定。它是指定允许克隆这种类型的对象。

clone()如果您的类依赖于(由方法提供)的内置实现Object.clone(),则此标记接口启用逐字段克隆。(如果你在一个没有实现的对象上调用内置的 clone 方法Cloneable,你会得到一个CloneNotSupportedException。)

于 2012-07-14T06:23:14.783 回答
2

clone() 方法的目的是创建调用它的对象的新实例(副本)。正如您在使用克隆方法的答案中看到的那样,您的类应该实现 Cloneable 接口。你可以选择如何实现 clone ,你可以为你的班级做浅拷贝或深拷贝。您可以查看示例http://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/

于 2012-07-14T06:28:15.963 回答