0

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

这是我的单例类:

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();
    }
}
4

1 回答 1

0

你还没有实现Cloneable ,因此如果你尝试克隆你的类,你会得到一个异常。你也应该覆盖clone()

文档

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

还请注意评论中的建议- 克隆单例会使首先拥有一个单例的目的无效。事实上,当你克隆它时,它就不再是单例了。

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

于 2013-07-16T12:25:52.860 回答