目次 | 前の項目 | 次の項目 Java オブジェクト直列化仕様


1.5 クラスの直列化可能なフィールドの指定

クラスの直列化可能フィールドは、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 インタフェース」を参照してください。


目次 | 前の項目 | 次の項目
Copyright © 1997-2001 Sun Microsystems, Inc. All Rights Reserved.