在Singleton对象上调用clone方法时出错

时间:2013-07-16 11:50:18

标签: java singleton cloning

为什么在Singleton对象上调用clone方法时会出错?

这是我的Singleton类:

public class Singleton  {
    private Singleton (){
    }
    private static Singleton singleton;
    public static Singleton getSingleton(){
        if (singleton == null) {
            singleton = new Singleton();
                    return singleton;
        }
        return singleton;
    }

}

这是一个用户定义的类,在Singleton对象上调用clone方法:

public class SingletonDemo {
    public static void main(String[] args) {
        Singleton s = Singleton.getSingleton();
        Singleton s1 = (Singleton)s.clone();
    }
}

1 个答案:

答案 0 :(得分:0)

您尚未实施Cloneable因此,如果您尝试克隆您的课程,则会收到异常。您也应该覆盖clone()

来自the docs

  

在未实现Cloneable接口的实例上调用Object的clone方法会导致抛出异常CloneNotSupportedException

请注意advice in the comments - 克隆单身人士会使首先拥有一个人的目的失效。事实上,你克隆它的那一刻它不再是单身。

作为一般规则(适用于单身人士),请考虑使用复制构造函数而不是克隆。