在什么情况下,对象不应该是Clonable?

时间:2011-12-14 05:51:47

标签: java cloneable

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

所有集合类都实现了Cloneable接口,因此它们本身都是Cloneable。此外Cloneable是一个标记接口,这意味着它通知编译器/ JVM在幕后执行一些额外的工作,以便使该对象成为Cloneable。

现在我的问题是:你在哪些情况下不希望你的对象是可克隆的?

4 个答案:

答案 0 :(得分:3)

Singleton是一个很好的案例。另一个是你在系统上引用的东西,你应该只有一个参考。例如,一个流。让多个对象指向相同的输入(或输出)流可能会导致各种问题。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我不想拥有可复制的线程:X 无法克隆的资源类或会话bean