基本集合接口(List,Map,Set)不扩展Cloneable
接口。这样做是为了不对具体实现强制执行Cloneability。
所有集合类都实现了Cloneable
接口,因此它们本身都是Cloneable。此外Cloneable
是一个标记接口,这意味着它通知编译器/ JVM在幕后执行一些额外的工作,以便使该对象成为Cloneable。
现在我的问题是:你在哪些情况下不希望你的对象是可克隆的?
答案 0 :(得分:3)
Singleton是一个很好的案例。另一个是你在系统上引用的东西,你应该只有一个参考。例如,一个流。让多个对象指向相同的输入(或输出)流可能会导致各种问题。
如果您想使用clone()
,请考虑改为创建复制构造函数。
答案 1 :(得分:2)
如果你的类拥有大量数据,那么你可能不希望它被克隆以停止保留大量数据的多个副本。
答案 2 :(得分:1)
如果要实现Singleton模式,您可能不希望生成的Singleton可以克隆。
答案 3 :(得分:1)
我不想拥有可复制的线程:X 无法克隆的资源类或会话bean