2013-07-21 113 views
5

Java中枚舉類型的默認反序列化受限於readObjectreadObjectNoData throw InvalidObjectException。由於這個原因,枚舉類型對於實現單例類沒有任何缺陷是完美的(Item 77,Effective Java,2nd Edition,Bloch)。Java中枚舉的反序列化

  • 爲什麼一方面enum類型實現了Serializable
  • 在實踐中應該如何枚舉引用反序列化?

回答

3

枚舉類型實現Serializable所以你可以序列化包含枚舉常量的對象。枚舉常量以與其他任何對象相同的方式反序列化:使用ObjectInputStream.readObject()。枚舉常量的編碼方式與正常類的實例不同,因此ObjectInputStream.readObject()可以在不調用readObject方法的情況下對其進行反序列化。還有其他使用特殊編碼的類,其中有StringClass。有關更多詳細信息,請參見documentation

如果你想自己實現可序列化的單例類,請看readResolve方法。

+0

那麼,點#1在這裏有一個答案。包含枚舉引用的類不應該僅在序列化時崩潰。 我嘗試默認的反序列化,它的工作很簡單!那麼爲什麼有很多帖子討論有效地反序列化枚舉(僅僅爲了提高代碼重新分解)呢? – abksrv