2013-05-31 2 views
8

자바에서 직렬화에 대해 읽었으며, 다른 언어로도 조금 읽었습니다.하지만 제네릭 클래스가 있고 인스턴스를 파일로 저장하려고하면 어떻게됩니까?Java에서 제너릭 클래스를 직렬화하는 방법은 무엇입니까?

코드 예제

public class Generic<T> { 
    private T key; 
    public Generic<T>() { 
    key = null; 
    } 
    public Generic<T>(T key) { 
    this.key = key; 
    } 
} 

뭐죠 객체의이 종류를 저장하는 가장 좋은 방법은? 물론 실제 수업에는 더 많은 것이 있지만 실제 아이디어가 궁금합니다.

+3

그냥 다른 클래스로 : 그것은'Serializable' 인터페이스를'구현합니다) sp00m @' – sp00m

+0

은 : 때로는 클래스를 변경할 수 없습니다. 아마 여기의 경우는 아닙니다;) – Burkhard

답변

17

은 일반적인 클래스 Serializable을 평소와 같이 만듭니다. 필드는 일반적인 유형을 사용하여 선언하는 경우

public class Generic<T> implements Serializable {...}

, 당신은 Serializable을 구현하도록 지정할을 할 수 있습니다.

public class Generic<T extends Serializable> implements Serializable {...}

여기 드문 자바 문법에 유의하시기 바랍니다. 당신이 원하지 않는 경우

public class Generic<T extends Something & Serializable> implements Serializable {...}

+0

Ty이 클래스를이 클래스에 추가하는 것이 더 쉽기 때문에이 대답을 선호합니다 ... 저는 allready ... 직렬화 가능을 구현하지만 ObjectOutputStream을 저장하려고 시도합니다. 내 프로그램이 멈췄다. – Leolian

+0

'Serializable'을 구현하면 캡슐화와 정보 숨김이 깨집니다. 모든 비공개 및 패키지 전용 멤버는 클래스의 내 보낸 API의 일부가됩니다. 이로 인해 잠재적 인 보안 취약성이 발생하고 클래스가 더 취약해질 수 있습니다. Serializable을 구현하는 결정은 세심한주의를 기울여 이루어져야하며 직렬화 된 형식은주의 깊게 설계되어야한다 (Efffective Java, 2nd Ed). – scottb

0

(또는 수 없습니다) Serializable 인터페이스를 구현, 당신은 XStream을 사용할 수 있습니다. 다음은 짧은 tutorial입니다. 귀하의 경우에는

:

XStream xstream = new XStream(); 
Generic<T> generic = ...;//whatever needed 
String xml = xstream.toXML(generic); 
//write it to a file (or use xstream directly to write it to a file) 
+0

'Serializable'을 구현하는 또 다른 방법은'Externalizable' (자체적으로'Serializable'을 확장)을 구현하는 것입니다. – scottb

관련 문제