java – 浅层复制单例类对象是否可能?
作者:互联网
使用clone方法,我们可以得到一个已经成为单例的类的许多实例吗?
此外,是否有必要编写“implements Cloneable”,因为我了解到所有对象都是从Object类扩展的,因此在Object的另一个子节点上调用protected clone()的子对象应该没有访问问题
解决方法:
直到你用你的单例实现Cloneable才会发生(这是一种反模式,因为它与单例的目的相矛盾).所以,只有你做这样的事情才会发生:
SomeClass.java
class SomeClass implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Singleton.java
class Singleton extends SomeClass {
public static Singleton instance = new Singleton();
private Singleton() {}
}
Main.java
class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Singleton singleton1 = Singleton.instance;
Singleton singleton2 = singleton1.clone();
System.out.println("singleton1 : "
+ singleton1.hashCode());
System.out.println("singleton2 : "
+ singleton2.hashCode());
}
}
产量
singleton1 : 445884362
singleton2 : 1793329556
即使在这种情况下,您也可以通过在Singleton中覆盖clone并抛出异常来解决此问题.
标签:cloning,shallow-copy,java,singleton,shallow-clone 来源: https://codeday.me/bug/20190731/1587011.html