2012-11-15 31 views
0

我看到很多人執行clone方法的單身人士,拋出一個CloneNotSupportedException。爲什麼?單身克隆攻擊

例如,這可能是通過克隆或任何其他方式黑客攻擊? Btw。我已經閱讀了有效的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; 
    } 
} 

回答

2

否則,你可以使用克隆創建單個類的多個對象。

+0

如果沒有超類實現clone(),那會如何工作? – Jochen

+0

對象類具有'clone()'方法 –

+0

但是如果沒有實現Cloneable的接口,你會如何調用它? – Christian

0

...拋出一個CloneNotSupportedException。爲什麼?

您可以檢查出的文檔here

protected Object clone() throws CloneNotSupportedException 

拋出: CloneNotSupportedException異常 - 如果對象的類不支持Cloneable接口。覆蓋克隆方法的子類也可以引發此異常,以指示無法克隆實例。

+0

我沒有問爲什麼克隆拋出一個CloneNotSupportedException。我問,爲什麼有人實現該方法,如果沒有接口Cloneable實現呢? – Christian

+0

我不明白爲什麼有人試圖實現單身人士也會實現克隆方法。這對我沒有意義。 –

+0

它沒有。但是在開發人員通過實現克隆和拋出異常來阻止克隆的論壇中,我看到了很多提及。我問爲什麼,因爲我無法想象一個黑客。 – Christian