12
A
答えて
1
サンプル実装in this answerがあります。
19
Josh Blochの Effective Java、Second Editionの最後のセクションには素晴らしい説明があります。
クラスA
をシリアライズ可能にしたいとします。まず、Serializable
を実装することを宣言します。次に、シリアル化メソッドwriteReplace()
を使用して、A
のインスタンスの代わりにシリアル化される、いわゆる「シリアル化プロキシ」を返します。 writeReplace()
メソッドはパブリックである必要はありません。 A
のデフォルトのシリアル化は実行されません。そのため、A
のすべてのAPIプロパティが維持されます。
通常、プロキシは、それ自体がSerializable
(または読み取り/書き込みプロセスを完全に制御するためにExternalizable
)を実装する必要があるプライベート静的ネストされたクラスとして実装されます。プロキシはプライベートなので、引数のないコンストラクタや変更可能なものなどの実装の詳細は隠されます。
プロキシは、デシリアライズ時にオブジェクトを再構成できるように、書き込む元のオブジェクトの状態を十分に保存します。デシリアライズ時に、プロキシはのインスタンスを返すためにreadResolve()
メソッドを使用します。シングルトンの場合、これはシングルトンインスタンスそのものになります。
詳細なブログエントリを例文Serializing Immutables and Singletons with a Serialization Proxyで書きました。
関連する問題
- 1. トランスフォームとは何か、トランスフォームとは何ですか?
- 2. jobConfクラスとは何ですか?それは何ですか?
- 3. @privateとは何ですか?その用途は何ですか?
- 4. IPM.Noteとは何ですか?その用途は何ですか?
- 5. _applyプラグインとは何ですか: 'com.google.gms.google-services'_は何ですか?
- 6. Mongoclientとは何ですか?その目的は何ですか?
- 7. 型とは何ですか?スカラーの型コンストラクタは何ですか?
- 8. GraphemeClusterとは何ですか?ExpressibleByExtendedGraphemeClusterLiteralの機能は何ですか?
- 9. オプションとは何ですか?typescriptの[x:string]は何ですか?
- 10. Sqliteとは何ですか?
- 11. イメージハッシュとは何ですか?
- 12. (* new)とは何ですか?
- 13. WCF:ServiceHostとは何ですか?
- 14. __gmon_start__シンボルとは何ですか?
- 15. Control.IsHandleCreatedとは何ですか?
- 16. ADBとは何ですか?
- 17. `+:`と ` - :`は何ですか?
- 18. sun.jnu.encodingとは何ですか?
- 19. シャドウメモリとは何ですか?
- 20. os.geteuid()とは何ですか?
- 21. RFC3986とは何ですか?
- 22. onPrepareOptionsMenuとは何ですか?
- 23. BOOST_ROOTとは何ですか?
- 24. WCFとは何ですか?
- 25. _CDSnapshot_EntityNameとは何ですか?
- 26. ViewControllerとは何ですか?
- 27. REQUEST_CHECK_SETTINGとは何ですか?
- 28. msstdfmt.dllとは何ですか?
- 29. キャッシュタグディレクトリとは何ですか?
- 30. xcLanguageSpecificationIdentifierとは何ですか?
シリアル化プロキシがExternalizableになるかどうか疑問に思っていました。この本にはSerializableしか書かれていない。ありがとう! –