5.6.2 互換性のある変更
クラスへの互換性のある変更は、次のように処理されます。
- フィールドの追加 -
再構成されるクラスにストリームにないフィールドがあると、オブジェクトのそのフィールドはその型に対す
るデフォルト値に初期化される。クラス固有の初期化が必要な場合、そのクラスは readObject
メソッドによって、そのフィールドをデフォルト値以外に設定することができる
- クラスの追加 -
ストリームには、ストリームにおける各オブジェクトの型階層がある。ストリームのこの階層と現在のクラス
を比較すれば、追加のクラスがわかる。ストリームには、そのオブジェクトを初期化するために使用できる情
報はないので、そのクラスのフィールドはデフォルト値に初期化される
- クラスの削除 -
ストリームのクラス階層と現在のクラスを比較すれば、クラスが削除されたことがわかる。この場合、そのク
ラスに対応するフィールドとオブジェクトが、ストリームから読み込まれる。プリミティブフィールドは破棄
されるが、削除されたクラスによって参照されるオブジェクトは作成される。
こうするのは、それらがあとからストリームで参照される可能性があるからである。ストリームがガベージコ
レクトされたり、リセットされたりするときに、それらのオブジェクトはガベージコレクトされる
-
writeObject/readObject メソッドの追加 -
ストリームを読み込むバージョンにこれらのメソッドがある場合、デフォルトの直列化によってストリームに
書き込まれた必須データは、通常どおり readObject
によって読み込まれなければならない。このメソッドは、任意データを読み込む前に、まず
defaultReadObject を呼び出す必要がある。writeObject
メソッドは、通常どおり、defaultWriteObject
を呼び出して必須データを書き込まなければならない。 その後、任意データを書き込むことができる
-
writeObject/readObject メソッドの削除 -
このストリームを読み込むクラスにこれらのメソッドがないと、必須データはデフォルトの直列化によって読
み込まれ、任意データは破棄される
-
java.io.Serializable の追加 -
これは、型を追加するのと同じことである。ストリームにはこのクラスに対する値がないので、そのフィール
ドは、デフォルト値に初期化される。直列化不能クラスのサブクラス化をサポートするには、そのクラスのス
ーパータイプに引数なしのコンストラクタがあり、そのクラス自身がデフォルト値に初期化されなければなら
ない。引数なしのコンストラクタがないと、InvalidClassException がスローされる
- フィールドへのアクセスを変更 - アクセス修飾子
public、package、protected、private
を変更しても、直列化によってそれらのフィールドに値を代入できることには影響しない
- フィールドの static から非 static へ、または transient から非
transienst への変更 -
デフォルトの直列化で直列化可能フィールドを計算する場合、この変更は、フィールドをクラスに追加するの
と同じことである。新しいフィールドはストリームに書き込まれるが、その値は以前のクラスによって無視さ
れる。 これは、直列化によって static や transient のフィールドに値が代入されないためである
目次 | 前の項目 | 次の項目
Copyright ©
1997-1999 Sun Microsystems, Inc. All Rights Reserved.