2012-11-15 3 views
0

clone 싱글 톤을 구현하는 많은 사람들이 있는데, 이는 CloneNotSupportedException입니다. 왜?싱글 톤 클론 공격

예를 들어 복제 나 다른 방법으로 해킹 할 수 있습니까? Btw. 나는 효과적인 자바 읽고 enums에 대해 알고있다.

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 인터페이스를 지원하지 않는 경우. clone 메소드를 오버라이드 (override) 한 서브 클래스도이 예외를 슬로우하면 (자), 인스턴스를 복제 할 수없는 것을 나타냅니다.

+0

복제본이 CloneNotSupportedException을 던지는 이유를 묻지 않았습니다. 나는 어쨌든 구현 된 Cloneable 인터페이스가 없다면 누구나 그 메소드를 구현할 것인가? – Christian

+0

싱글 톤을 구현하려는 누군가가 왜 복제 메소드를 구현하는지 이해할 수 없습니다. 그것은 나에게 이해가되지 않는다. –

+0

그렇지 않습니다. 그러나 포럼에서 복제본을 구현하고 예외를 던져서 개발자가 복제를 방해하고 있다는 언급을 많이 보았습니다. 내가 왜 해킹을 상상할 수 없기 때문에 나는 묻는다. – Christian