0

我到处读到,如果我在没有实现 Cloneable 接口的情况下调用 clone(),我将得到 CloneNotSupportedException。如果我在一个没有实现 Cloneable 的类中实现 clone 方法,我仍然可以调用 clone() 没有异常。我的意思是实现 Cloneable 没有任何区别。请详细说明........

4

3 回答 3

4

实现 Cloneable 接口只是告诉程序员这个对象应该有一个有效的克隆方法。

如果您查看 Cloneable 界面,您会发现类似这样的评论

请注意,此接口不包含clone 方法。因此,不可能仅凭借实现该接口的事实来克隆对象。即使以反射方式调用 clone 方法,也不能保证它会成功。

可克隆接口只是程序员在向克隆添加实现时应该遵循的编程实践。

于 2013-05-04T18:08:49.847 回答
3

我到处读到,如果我在没有实现 Cloneable 接口的情况下调用 clone(),我将得到 CloneNotSupportedException。

正确,如果我们谈论的是 Object.clone()。

如果我在一个没有实现 Cloneable 的类中实现 clone 方法,我仍然可以调用 clone() 没有异常。

不,你不能,如果我们谈论的是 Object.clone()。

我的意思是实现 Cloneable 没有任何区别。

是的,它确实。可能您的类继承自已经实现 Cloneable 的类。如果没有看到任何代码,就不可能知道您是如何产生这种误解的。

请详细说明。

没有什么可详细说明的。你错了。而已。

于 2013-05-04T18:30:36.960 回答
-2

您的类从 Object 继承了受保护的方法 clone()(并且它能够创建对象的浅表副本)。但是,为了在您的类定义之外访问该方法,您需要将您的类标记为 Cloneable,从而实现。

在您给出的示例中,如果您创建了一个与 clone() 具有相同签名的方法,那么实现 Cloneable 对编译器来说根本不重要,因为他将获得对您请求的方法的访问权限,因此实现可克隆将只是经验性的。但是,我建议您坚持良好的实践方法。

于 2013-05-04T18:21:53.067 回答