2011-09-19 2 views
1

객체의 상태를 저장한다는 것을 이해하지만 어떤 인터페이스에서이 인터페이스를 구현해야합니까? 예를 들어자바에서 serializable이 작동하는 방식을 이해할 수 있는지 잘 모르겠다.

, 당신은 4 개 클래스 A, B, C, D가 있다고 가정 :

abstract class A { ... } 
class B extends A { ... } 
class C extends A { ... } 

DAB의 개체를 만들고 조작하는 클래스 :

class D { A a; B b; ... } 

프로그램의 상태를 저장하려면 D 및 A 클래스에서만 Serializable 인터페이스를 구현한다고해야합니까?

또한 D의 계산을 돕기 위해 사용중인 class E이 있다고 가정합니다.

ESerializable을 구현해야합니까? 계산에 도움이되는 클래스이고 나중의 상태에서 알 필요가있는 값을 저장하지 않기 때문에 그것은 나에게 맞지 않는 것처럼 보입니다.

답변

1

돌아갈 필요가있는 데이터를 보유한 것만 직렬화하십시오. 이 경우, A가 후보자로 보인다.

단순히 지속 된 개체의 집계이기 때문에 D를 직렬화하지 않을 것입니다 ... 나는 A 및 그 자식 (getData())의 모든 인스턴스를 배열이나 다른 것으로 검색 할 수있는 메서드를 허용합니다. 나는 모든 것을 저장한다. 그런 다음 또 다른 방법은 내가 배열을 사용하여 D를 다시 만들 수있게 해준다.

또한 E는 어떤 데이터도 보유하지 않으므로 직렬화 할 필요가 없다 (지속되어야하는 런타임 데이터가 없다).

B와 C가 내 응용 프로그램을 다시 시작하면 그냥 자신에게 물어 A.

에서 직렬화 상속, 내가 다시 전원을 켜십시오 때이 원하는 작업 데이터입니다. 직렬화 된 객체를 가능한 한 가볍게 만들려고 노력하면 삶이 편하게됩니다.

-1

직렬화하려는 모든 객체는 Serializable 인터페이스를 구현해야합니다. 귀하의 클래스에서 A와 D는 그것을 구현해야합니다. 상태가 없으므로 E를 직렬화 할 필요가 없습니다.

일반적으로 상태를 보유하고있는 모든 클래스 (대략 인스턴스 수준의 변수가 있음)는 직렬화 될 경우 Serializable을 직접 또는 간접적으로 구현해야합니다.

+0

downvote에 대한 이유가 무엇입니까? – Santosh

+0

내 이유는 내가 당신을 동의하지 않는다는 점에서 당신은 E를 직렬화해서는 안된다는 것입니다. (나는 그렇지 않아야한다고 생각합니다. 그렇지 않으면 이것은 실제로 건설적인 대답이 될 수 없습니다 ... 또한 C 나 D를 직렬화 할 필요가 없습니다. ,하지만 당신은) 어쨌든, 내 대답을 확인하십시오. –

+0

@ Luchian,하지만 E는 상태 데이터를 가지고 있지 않습니다 (또한 Daryl Teo가 지적했습니다) 왜 당신이 그것을 직렬화하기를 원합니까? OP에서 언급 한 유틸리티 클래스. – Santosh

0

직렬화의 개념은 나중에 또는 다른 컴퓨터에서 인스턴스를 다시 만들고 싶다는 것입니다. 아마도 에 대해 무엇을 우리가 다시 만들어야하는지, 로컬로 생성 될 수 있는지 생각하는 것이 도움이 될 것입니다.

abstract class A implements Serializable { private int a; } 
abstract class B extends A { private int b; B(int b) { this.b=b;} } 
abstract class C extends A { private int c; C(int c) { this.c=c;} } 

이것은 D 우리가 똑같은 B 및 C 객체와 D 인스턴스를 원하기 때문에 직렬화한다이 경우 B의/역 직렬화 인스턴스를 직렬화 할 수 있고 C.

class D implements Serializable { 
    B someB; 
    C someC; 
    D(int b, int c) { 
    someB = new B(b); 
    someC = new C(c); 
    } 
} 

.

DE의 인스턴스를 참조하고 유효한 D 인스턴스를 다시 만들 때까지 E가 메서드를 제공하는 경우이를 직렬화 할 필요가 없습니다.

관련 문제