5.6.1 互換性のない変更
クラスに対する互換性のない変更とは、相互運用性の保証が維持できないような変更です。クラスの
展開の過程で起こる互換性のない変更には、次のものがあります。
- フィールドを削除する -
クラスのフィールドが削除されると、書き込まれたストリームにはその値がない。そのストリームが以前のク
ラスによって読み込まれると、ストリームに値がないため、そのフィールドの値はデフォルト値に設定される
。しかし、このデフォルト値は、以前のバージョンがその規約を果たす能力を損なうことがある
- 階層においてクラスを上方または下方に移動する -
ストリームのデータ順序が正しくなくなるため、この変更はできない
- 非 static フィールドを static に、または 非 transient
フィールドを transient に変更する -
デフォルトの直列化を前提としている場合、この変更は、フィールドをクラスから削除するのと同じことであ
る。そのクラスのこのバージョンでは、そのデータはストリームに書き込まれないので、そのクラスの以前の
バージョンで読むことはできない。フィールドの削除と同じように、以前のバージョンのフィールドはデフォ
ルト値に初期化されるので、そのクラスは予期できないエラーとなることがある
- プリミティブフィールドの宣言された型を変更する -
クラスの各バージョンは、データをその宣言された型で書き込む。ストリームのデータの型はフィールドの型
と一致しないので、クラスの以前のバージョンがそのフィールドを読み込もうとするとエラーになる
-
デフォルトのフィールドデータを書き込んだり、読み込んだりしないように
writeObject や
readObject メソッドを変更する。
または、前のバージョンがそのデータを書き込んだり読みこんだりしなかった場合、書き込みや読み込みを試
行させるためにメソッドを変更する。デフォルトのフィールドデータがストリームにあるかないかは、一貫し
ていなければならない
- クラスを
Serializable から
Externalizable に変更したり、その反対を行なったりするのは、互換性のない変更である。
こうすると、そのストリームに、使用できるクラスの実装と互換性のないデータが入ることになる
-
Serializable や Externalizable
を取り除くのは、互換性のない変更である。
こうすると、書き込まれたときに、そのクラスの古いバージョンで必要なフィールドが提供されないことにな
る
-
writeReplace または readResolve
メソッドをクラスに追加するときに、その動作がクラスの以前のバージョンと互換性がないオブジェクトを作
成する場合は、互換性がなくなる
目次 | 前の項目 | 次の項目
Copyright ©
1997-1999 Sun Microsystems, Inc. All Rights Reserved.