2017-12-05 30 views
0

클래스에 Serializable을 구현하려고하지만 수정할 수 없습니다. 내 생각은 다른 클래스에서 상속받은 다른 클래스를 만드는 것이 었습니다. 그러나 원래의 클래스는 다음과 같이 내장되어 있습니다 :개인 내부 클래스의 상속

public class ClassName { 

    private class InnerClass{ 
     private InnerClass(){ 
      //do stuff 
     } 
    } 

    public ClassName(){ 
     //do stuff 
    } 
} 

그래서 InnerClass 때문에 작동하지 않습니다 다음은 따라서 눈에 보이는 개인되지 않습니다 :

import java.io.Serializable; 

public class ClassTwo extends ClassName implements Serializable{ 

    private class InnerClass extends ClassName.InnerClass implements Serializable { 
     private InnerClass(){ 
      super(); 
     } 
    } 

    public ClassTwo(){ 
     super(); 
    } 
} 

원래 클래스를 변경하지 않고 ClassName로 직렬화 구현하는 방법이 ?

+0

직렬화하려는 모든 슬롯에 대한 읽기/쓰기 액세스 권한이있는 경우 클래스 이름을 포함하는 어댑터 클래스를 만들 수 있습니다. 읽기/쓰기 액세스 권한이 없으면 서브 클래 싱은 어쨌든 작동하지 않았을 것입니다. –

+0

Slivio는 기본적으로 정확하다고 생각합니다. 'InnerClass'에있는 getter와 setter에 접근하여 클래스의 인스턴스를 다시 만들 수 있다면, 어떤 종류의 래퍼로 그것을 할 수 있습니다. 그렇지 않다면 반성이 있습니다. 그러나 완전히 권장되지는 않습니다. '비공개'는 상속하거나 직접 액세스 할 수 없어야 함을 의미합니다. – markspace

+0

@Silvio 나는 대답으로 그 주석을 써야한다고 생각한다. 아무도 의견에서 그것을 볼 수 없습니다! – Keara

답변

1

직렬화하려는 모든 슬롯에 대한 읽기/쓰기 액세스 권한이있는 경우 어댑터 클래스를 만들 수 있습니다.

public class MyClassAdapter implements Serializable { 
    private MyClass instance; 
    ... 
} 

그런 다음 직렬화하기 전에이 어댑터 클래스의 인스턴스를 랩핑 한 다음 역 직렬화 후에 추출하십시오.

슬롯에 대한 읽기/쓰기 액세스 권한이없는 경우에는 그럴만한 이유가있을 수 있으며 소유하지 않은 데이터를 직렬화하는 것은 좋지 않은 아이디어입니다.