コンパレーターを使用して TreeMap をシリアル化することは可能ですか??
私はテストしましたが、コンパレーターなしでツリーマップを適切にシリアル化します。コンパレーターを追加すると、例外がスローされます。
コンパレータを一時的として宣言しても、まだ機能しません。すべてのツリーマップを一時的にする場合にのみ機能しますが、その場合はツリーをシリアル化しません。
コンパレーターを使用して TreeMap をシリアル化することは可能ですか??
私はテストしましたが、コンパレーターなしでツリーマップを適切にシリアル化します。コンパレーターを追加すると、例外がスローされます。
コンパレータを一時的として宣言しても、まだ機能しません。すべてのツリーマップを一時的にする場合にのみ機能しますが、その場合はツリーをシリアル化しません。
シリアル化しようとするすべてのクラスは、java.io.Serializable
インターフェイスを実装する必要があります。また、クラスの各メンバー変数はSerializable
. 実際、階層全体がそうあるべきです。
ここでは、TreeMap は特別なことは何もしていません。シリアル化する TreeMap とシリアル化しない TreeMap の唯一の違いがコンパレーターである場合、コンパレーターはシリアル化できません。
コンパレータをどのように実装していますか?一時的な宣言は、一時的な参照を持たない TreeMap クラスには意味がありません。
例外は何と言っていますか?
詳細については、こちらをご覧ください。その他の考慮事項 (このドキュメントおよび他の場所で説明されているように):
Comparator フィールドをインスタンス メンバーではなく静的に変更するのと同じくらい簡単であることがわかるかもしれません。
public final static Comparator<String> ID_IGN_CASE_COMP
他のすべてのフィールドがシリアライズ可能であることを確認する必要がありますが、これが出発点です。