java中可克隆接口的用途是什么?
实现可克隆接口有什么用,因为它是一个标记接口?
我总是可以在我的类中创建一个公共Object clone()方法。 可克隆接口的实际目的是什么?
这是因为如果您的对象不是Cloneable
, clone()
方法会抛出CloneNotSupportedException
。
您应该查看clone()
方法的文档 。
以下是在Object
类中声明clone()
方法的方法:
protected Object clone() throws CloneNotSupportedException
注意:
此外,人们已经意识到Clone
已经崩溃了。 这里的答案解释了为什么以及如何避免使用它。
使Cloneable
成为标记接口是一个错误。
也就是说,它所做的一件事是“启用” Object
的clone()
的默认实现。 如果您没有implement Cloneable
那么调用super.clone()
将抛出CloneNotSupportedException
。
有人说这是尝试从C ++模仿复制构造函数,但这是关于它的StackOverflow上的类似问题: 关于Java cloneable
clone()方法的目的是创建一个调用它的对象的新实例(副本)。 正如您在使用克隆方法的答案中所看到的,您的类应该实现Cloneable接口。 您可以选择实现克隆的方式,您可以为您的类做浅或深拷贝。 您可以查看示例http://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/ 。
目的在javadoc中指定。 它指定允许克隆此类对象。
如果您的类依赖于clone()
的内置实现(由Object.clone()
方法提供),那么此标记接口将启用逐字段克隆。 (如果在未实现Cloneable
的对象上调用内置克隆方法,则会出现CloneNotSupportedException
。)