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.