2013-07-21 4 views
5

Java에서 열거 형의 기본 비 직렬화는 readObjectreadObjectNoDataInvalidObjectException으로 제한됩니다. 이러한 이유로 열거 형은 결함이없는 싱글 톤 클래스를 구현하는 데 완벽합니다 (Item 77, Effective Java, 2nd Edition, Bloch).Java에서 열거 형의 비 직렬화

  • 왜 처음에는 enum 유형이 Serializable을 구현합니까?
  • 실제로 enum 참조를 deserialize해야합니까?

답변

3

열거 형은 Serializable을 구현하므로 열거 형 상수가 포함 된 개체를 serialize 할 수 있습니다. 열거 형 상수는 ObjectInputStream.readObject()을 사용하여 다른 모든 개체와 동일한 방식으로 deserialize됩니다. 열거 형 상수는 일반 클래스의 인스턴스와 다르게 인코딩되므로 ObjectInputStream.readObject()readObject 메서드를 호출하지 않고 해당 열을 deserialize 할 수 있습니다. 특수 인코딩을 사용하는 다른 클래스가 있는데 그 중 StringClass입니다. 자세한 내용은 documentation을 참조하십시오.

직접 직렬화 가능 싱글 톤 클래스를 구현하려면 readResolve 메서드를 살펴보십시오.

+0

글쎄, 포인트 # 1 여기에 대답이있다. enum 참조를 포함하는 클래스는 직렬화시 충돌 만 있으면 안됩니다. 나는 기본 직렬화를 시도하고, 그것은 간단하게 작동했다! 그렇다면 열거 형을 deserialize (단순히 코드 리팩토링 기능을 제공하기 위해)하는 것에 대한 많은 게시물이 있습니까? – abksrv