目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
クラスの直列化可能フィールドは、2 つの方法で定義できます。クラスのデフォルトの直列化可能フィールドは、非 transient および非 static フィールドとして定義します。このデフォルトの方法は、Serializable
クラスに特別なフィールドserialPersistentFields
を宣言することによってオーバーライドできます。このフィールドは、直列化可能フィールドの名前および型を一覧表示するObjectStreamField
オブジェクトの配列を使って、初期化する必要があります。このフィールドの修飾子には、private、static、および final が必要です。たとえば、次の宣言によって、デフォルトの動作が複製されます。
class List implements Serializable { List next; private static final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("next", List.class)};}クラスの直列化可能フィールドをserialPersistentFields
を使って定義すると、直列化可能フィールドがSerializable
クラスの現在の定義内のフィールドでなければならないという制限がなくなります。Serializable
クラスのwriteObject
およびreadObject
メソッドは、クラスの最新の実装を 「1.7 クラスの直列化可能フィールドへのアクセス」に記述されているインタフェースを使用してクラスの直列化可能フィールドにマッピングできます。このため、Serializable
クラスのフィールドは、後のリリースで変更できます。 ただし、フィールドが直列化可能フィールドへのマッピングを維持していて、直列化可能フィールドが異なるリリース間でも互換性がある場合に限ります。
注 - この機構を使用して内部クラスに対して直列化可能フィールドを指定する場合には、制限があります。内部クラスは、定数または定数からなる式に初期化された、final static フィールドのみ含むことができます。したがって、内部クラスにserialPersistentFields
を設定することはできません。ただし、static メンバクラスには設定できます。内部クラスのインスタンスの直列化に関するその他の制限事項については、「1.10 Serializable インタフェース」を参照してください。