我到处都读到如果我在没有实现Cloneable接口的情况下调用clone(),我将得到CloneNotSupportedException。如果我在没有实现Cloneable的类中实现clone方法,我仍然可以调用clone()w / o异常。我的意思是实现Cloneable没有任何区别。请详细说明........
答案 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的实现只是经验性的。但是,我建议你坚持良好的做法。