是否需要使用Clonable?

时间:2013-05-04 18:00:18

标签: java cloneable

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

3 个答案:

答案 0 :(得分:4)

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

如果您查看了Cloneable界面,您会发现一个类似于此内容的评论

  

请注意,此接口包含克隆   方法。因此,仅仅通过克隆对象是不可能的   因为它实现了这个接口。即使是   克隆方法是反射性调用的,不能保证它   会成功的。

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

答案 1 :(得分:3)

  

我到处读到,如果我调用clone()而不实现Cloneable接口,我将得到CloneNotSupportedException。

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

  

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

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

  

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

是的。可能您的类继承自已实现Cloneable的类。没有看到任何代码,就不可能知道你是如何得出这种误解的。

  

请详细说明。

没有什么可说明的。你错了。就是这样。

答案 2 :(得分:-2)

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

在你给出的例子中,如果你创建了一个与clone()具有相同签名的方法,那么实现Cloneable对编译器来说无关紧要,因为他可以访问你所请求的方法,所以Cloneable的实现只是经验性的。但是,我建议你坚持良好的做法。