shr*_*000 25 java singleton clone
我在网上读到的关于Singleton设计模式的许多文章都提到该类应该覆盖'clone()'方法,并在其中抛出'CloneNotSupported'异常.这真的有必要吗?
默认情况下,clone()方法是受保护的,因此没有类(同一个包中的类除外)能够在该Singleton实例上调用它.另外,如果此Singleton没有实现Cloneable,那么即使调用此方法,它也会产生运行时异常.另外,构造函数是私有的,我们将无法对其进行子类化,从而允许进行克隆.那么我还应该为我的Singleton类实现这个建议吗?
编辑:只是澄清:我不是在寻找实现Singleton的最佳方法.我只是询问上面提到的建议的有效性,以及"正常"的Singleton模式(而不是基于Enum的Singleton).
Mat*_*all 24
如果您真的要实现单例,请使用单元素枚举并停止考虑它.
编辑:只是澄清:我不是在寻找实现Singleton的最佳方法.我只是询问上面提到的建议的有效性,以及"正常"的Singleton模式(而不是基于Enum的Singleton).
既然你有有效的Java,那么你应该已经意识到了陷阱和问题Cloneable.也就是说,如果你要用一种"错误的"方式实现单例,不,那么绝对没有理由实现Cloneable和覆盖Object#clone()只是为了抛出CloneNotSupportedException.当接口不存在时Object#clone()已经这样做了Cloneable.
@ shrini1000,你有一个有效的问题,但关于克隆的建议非常特定于以下条件
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
Run Code Online (Sandbox Code Playgroud)
只有当singleton类的超类实现了public clone()方法时,才需要使用上述方法.
| 归档时间: |
|
| 查看次数: |
53705 次 |
| 最近记录: |