直列化、展開、および新しいスーパークラスの追加

概説

直列化の際にバージョン管理を使って、新しいスーパークラスを持つクラスを展開する方法を示します。たとえば、最初のクラスが次の構造を持つとします。

  class A {...};
  class C extends A {...};

展開したクラスが次の構造を持つとします。

  class A {...};
  class B extends A {...};
  class C extends B {...};

この場合、新しいバージョンのサブクラス C は古いバージョンのサブクラス C を読めなければなりません。逆に、古いバージョンのサブクラス C も新しいバージョンのサブクラス C を読めなければなりません。この例題では、この原理を説明します。

展開されたクラス (ASuperClassASubClass) は、serialVersionUID フィールドを定義する必要があります。このフィールドは、オリジナルクラス (ASuperClassASubClass) で serialver コマンドを使用して取得することができます。

この例題では、スーパークラス (A と B) は Serializable インタフェースを実装します。実装しなければ、サブクラス C が A と B のフィールドの保存と復元の責任を負うことになってしまいます。この問題の詳細は、「スーパークラスが直列化可能でない場合の直列化」を参照してください。

関連情報

ソースファイル
例題の実行
例題リスト