基本集合接口(List、Map、Set)不扩展Cloneable
接口。这样做是为了不对具体实现强制执行可克隆性。
所有集合类都实现了Cloneable
接口,因此它们本质上都是可克隆的。也是一个标记接口,意味着它指示编译器/JVM 在幕后Cloneable
做一些额外的工作,以便使该对象可克隆。
现在我的问题是:您不希望您的对象可克隆的情况是什么?
单例是一个很好的例子。另一个是您对系统上某些内容的引用,而您应该只有一个引用。例如,一个流。让多个对象指向同一个输入(或输出)流可能会导致各种问题。
如果您想使用clone()
,请考虑创建一个复制构造函数。
如果您的班级拥有大量数据,那么您可能不希望克隆它以停止保留大量数据的多个副本。
如果您要实现单例模式,您可能不希望生成的单例是可克隆的。
我不想拥有可克隆的线程:X 既不是可克隆的资源类也不是会话 bean