2013-07-21 24 views
5

Javaでの列挙型のデフォルトの逆シリアル化は、readObjectおよびreadObjectNoDataInvalidObjectExceptionとなるように制限されています。このため、列挙型は、欠陥のないシングルトンクラスを実装するのに最適です(Item 77、Effective Java、2nd Edition、Bloch)。Javaでの列挙型の逆シリアル化

  • なぜ、最初に列挙型がSerializableを実装しているのですか?
  • 実際にenumリファレンスをデシリアライズする必要がありますか?

答えて

3

列挙型はSerializableを実装しているため、列挙型定数を含むオブジェクトをシリアル化できます。列挙型定数は、ObjectInputStream.readObject()を使用して、他のオブジェクトと同じ方法で逆シリアル化されます。列挙型定数は、通常のクラスのインスタンスとは異なる方法でエンコードされるため、ObjectInputStream.readObject()readObjectメソッドを呼び出さずにデシリアライズできます。特殊なエンコーディングを使用する他のクラスがあり、その中にはStringClassがあります。詳細は、documentationを参照してください。

シリアルトンシリアンクラスを実装する場合は、readResolveメソッドを参照してください。

+0

まあ、ポイント#1の回答があります。列挙型参照を含むクラスは、直列化でクラッシュしてはなりません。 私はデフォルトのデシリアライズを試みますが、それは簡単に機能しました!それでは、列挙型のデシリアライズを効果的に議論する記事がたくさんあります(コードを再作成するだけです)。 – abksrv

関連する問題