2

基本集合接口(List、Map、Set)不扩展Cloneable接口。这样做是为了不对具体实现强制执行可克隆性。

所有集合类都实现了Cloneable接口,因此它们本质上都是可克隆的。也是一个标记接口,意味着它指示编译器/JVM 在幕后Cloneable做一些额外的工作,以便使该对象可克隆。

现在我的问题是:您不希望您的对象可克隆的情况是什么?

4

4 回答 4

3

单例是一个很好的例子。另一个是您对系统上某些内容的引用,而您应该只有一个引用。例如,一个流。让多个对象指向同一个输入(或输出)流可能会导致各种问题。

如果您想使用clone(),请考虑创建一个复制构造函数

于 2011-12-14T05:59:11.763 回答
2

如果您的班级拥有大量数据,那么您可能不希望克隆它以停止保留大量数据的多个副本。

于 2011-12-14T05:56:36.080 回答
1

如果您要实现单例模式,您可能不希望生成的单例是可克隆的。

于 2011-12-14T05:55:00.910 回答
1

我不想拥有可克隆的线程:X 既不是可克隆的资源类也不是会话 bean

于 2011-12-14T05:57:06.460 回答