为什么在java.lang.Cloneable接口中没有指定.clone()方法?
基本上,它是一个损坏的接口。Ken Arnold和Bill Venners在Java设计问题中讨论了这个问题。
Arnold:
如果我此时成为上帝(很多人可能会高兴我不是),我会说弃用
Cloneable
并使用Copyable
,因为Cloneable
存在问题。除了它拼写错误之外,Cloneable
没有包含clone
方法。这意味着您无法测试某个对象是否为Cloneable
的实例,将其强制转换为Cloneable
,并调用clone
方法。您必须再次使用反射,这很糟糕。这只是其中一个问题,但这是我肯定要解决的问题。
const
参数,但复制每个(可变)对象实例并不是一个好的解决方案。是的,Java 有一些糟糕的地方,这就是其中之一。使用 Kotlin / 数据类。 - Maarten BodewesCloneable
接口没有任何方法或字段,只用于标识可克隆的语义。java.lang.Cloneable
- java.io.Serializable
- java.util.EventListener
public interface PublicCloneable extends Cloneable {
public Object clone();
}
Cloneable
的目的。Cloneable
只是用来使Object.clone()
抛出异常或不抛出异常的。它从来不是一个让你调用clone
的接口。也许Java如果有这样的接口会更好,但是缺乏这样一个接口不能使另一个接口(Cloneable
)变得不完整。 - newacct