Java:关于克隆方法的问题

时间:2011-11-14 09:31:08

标签: java clone effective-java

我正在阅读Effective Java,本书对克隆方法有如下评论。

  

在实践中,   一个实现Cloneable的类应该提供一个正确的   功能公共克隆方法。 除非另有说明,否则通常不可能这样做   所有类的超类都提供了良好的克隆实现,   是公开的还是受保护的。

有人可以举例说明为什么不能这样做吗?

4 个答案:

答案 0 :(得分:3)

想象一下,其中一个基类有一个私有字段,要以特定的方式复制,以使“克隆”在语义上有效。

如果该基类没有提供正确的克隆实现,则派生类也不能 - 它无法正确构建该私有字段。

答案 1 :(得分:1)

基本上,如果您的类层次结构的一部分包含一个不受您控制且不属于JDK的类(即第三方闭源类),并且该类没有实现良好的{{ 1}}方法,然后生成一个方法并不是特别容易。

答案 2 :(得分:0)

在许多情况下,通常使用未实现的克隆编写类。因此,当编写子类时,它同样用克隆编写而不是实现。在某些时候,需要在子类中编写克隆方法,但它的父级没有。

答案 3 :(得分:0)

`@override
public MyClass clone(){

Myclass clonedObj = super.clone(); // This is why the classtree all needs to be cloneable

// now copy values of all members to the new obj.
// be carefull to not copy references
clonedobj.setMyMember(this.getMyMember()); // copy of member var;
clonedobj.setMyotherMember(this.getMyOtherMember().clone()); // a composit obj must be cloned.

}
`

这可能是anwser?