Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在什么情况下,对象不应关闭?_Java_Cloneable - Fatal编程技术网

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”的一点评论而已。)如果我的单例是可克隆的,那有什么害处呢?我可能需要这样做,以防我想让持有大量数据的类保持不变,并在其他地方需要时使用其副本/克隆。就像弦一样。