Java 在什么情况下,对象不应关闭?
基本采集接口(列表、映射、设置)不扩展Java 在什么情况下,对象不应关闭?,java,cloneable,Java,Cloneable,基本采集接口(列表、映射、设置)不扩展Cloneable接口。这样做是为了不强制具体实现的可克隆性 所有的集合类都实现了Cloneable接口,因此它们都具有内在的可克隆性。另外,Cloneable是一个标记接口,意味着它向编译器/JVM发出信号,在幕后做一些额外的工作,从而使该对象可克隆 现在我的问题是:在什么情况下,您不希望对象是可克隆的?如果要实现单例模式,您可能不希望生成的单例是可克隆的 如果你的类拥有一大块数据,那么你可能不希望它被克隆以停止保留一大块数据的多个副本。我不希望有可克隆的
Cloneable
接口。这样做是为了不强制具体实现的可克隆性
所有的集合类都实现了Cloneable
接口,因此它们都具有内在的可克隆性。另外,Cloneable
是一个标记接口,意味着它向编译器/JVM发出信号,在幕后做一些额外的工作,从而使该对象可克隆
现在我的问题是:在什么情况下,您不希望对象是可克隆的?如果要实现单例模式,您可能不希望生成的单例是可克隆的 如果你的类拥有一大块数据,那么你可能不希望它被克隆以停止保留一大块数据的多个副本。我不希望有可克隆的线程:X
无论是可克隆的资源类还是会话bean,Singleton都不是一个好例子。另一个是系统中对某个对象的引用,而该对象应该只有一个引用。例如,流。让多个对象指向同一个输入(或输出)流可能会导致各种问题
如果您想使用<代码>克隆()/<代码>,请考虑创建复制构造函数。
列表,map,设置扩展集合,不是吗?所以他们实现了clonable anywayNevermind,只是检查了收集框架-它没有实现Cloneablel我不认为标记接口是在幕后做任何神奇事情的信号。它只是意味着可克隆的实例
将返回true
。(这并不是说对clone()
的调用中没有魔法;只是对“标记接口”一词的评论。)我不认为标记接口是在幕后做任何魔法的信号。它只是意味着可克隆的实例
将返回true
。(这并不是说对clone()
的调用没有魔力;只是对术语“marker interface”的一点评论而已。)如果我的单例是可克隆的,那有什么害处呢?我可能需要这样做,以防我想让持有大量数据的类保持不变,并在其他地方需要时使用其副本/克隆。就像弦一样。