0

我看到很多人实现了clone单例的方法,它们抛出了一个CloneNotSupportedException. 为什么?

例如,如何通过克隆或任何其他方式破解?顺便提一句。我已经阅读了有效的 java 并且了解枚举。

public final class Elvis implements Serializable {

    public final static transient Elvis INSTANCE = new Elvis();

    private Elvis() {
        if(INSTANCE != null) {
            throw new IllegalStateException("This is a singleton. Don't try to instantiate it.");
        }
    }

    private Object readResolve() {
        //serialization protection
        return INSTANCE;
    }
}
4

2 回答 2

2

否则,可以使用克隆创建多个单例类的对象。

于 2012-11-15T16:23:34.547 回答
0

...抛出一个 CloneNotSupportedException。为什么?

你可以在这里查看文档:

protected Object clone() throws CloneNotSupportedException

抛出: CloneNotSupportedException - 如果对象的类不支持 Cloneable 接口。覆盖 clone 方法的子类也可以抛出此异常,表示无法克隆实例。

于 2012-11-15T16:28:17.823 回答