为什么不在内部重写.clone?

yes*_*nes 19 java clone

我理解Java克隆如何工作以及反对使用它的论据.让我们说无论如何我已经死了.

为方便起见,我想为类Foo编写一个克隆方法,如下所示:

@Override
public Foo clone(){
    Foo f = (Foo)super.clone();
    //Replace mutable fields
    return f;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这将是安全的.但是,我注意到API中的Cloneable类不会这样做.这有什么原因,这是不好的风格?

Kay*_*man 17

回到Java 5之前,根本不允许协变返回类型,因此Foo clone()甚至不会编译.由于Cloneable很久以前写过很多课程,这可能是大部分案例的原因.

我怀疑较新的课程并不仅仅因为clone()已知非常少,而且当人们很少使用它时,他们甚至不认为他们可以施展它.他们找到了一些"如何实现clone()"的问题,并以老式的方式编写代码.

  • 好老"它已经破了,没有人甚至试图浪费时间试图解决它". (5认同)