关于 clone() 、对象 class 和 Java 中的可克隆接口的混淆
confusion regarding clone() , Object class and Clonable Interface in Java
如果clone()
是Object
class的一部分,那么为什么我们需要实现Clonable
接口才能使用clone()
?
我读到clone()
是Object
的受保护成员,那么clone()
和Clonable
接口之间的关系是什么。
对不起,如果我听起来很愚蠢。我刚开始学习Java.
Cloneable
是一个标记界面。它没有任何方法。只是将您的 class 列入白名单,使 Cloneable
来自 docs
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.
强烈不推荐使用clone()。我不会深入讨论这个题外话,但如果您需要更多这方面的数据,请查看 Effective Java. Read Item 11: "Override clone judiciously"
。
Object.clone()
有一个实现。如果对象实现了 Cloneable,它会生成对象的浅表副本。
.clone()
方法不属于任何接口。
拥有.clone()
方法和实现Cloneable
接口是完全不同的事情。
如果要使用Object的clone方法,只需要实现Cloneable
接口
如果clone()
是Object
class的一部分,那么为什么我们需要实现Clonable
接口才能使用clone()
?
我读到clone()
是Object
的受保护成员,那么clone()
和Clonable
接口之间的关系是什么。
对不起,如果我听起来很愚蠢。我刚开始学习Java.
Cloneable
是一个标记界面。它没有任何方法。只是将您的 class 列入白名单,使 Cloneable
来自 docs
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.
强烈不推荐使用clone()。我不会深入讨论这个题外话,但如果您需要更多这方面的数据,请查看 Effective Java. Read Item 11: "Override clone judiciously"
。
Object.clone()
有一个实现。如果对象实现了 Cloneable,它会生成对象的浅表副本。
.clone()
方法不属于任何接口。
拥有.clone()
方法和实现Cloneable
接口是完全不同的事情。
如果要使用Object的clone方法,只需要实现Cloneable
接口