| 目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
Serializable クラスと Externalizable クラスの場合、クラスはreadResolveメソッドを使うことによって、呼び出し側に返される前に、ストリームから読み込んだオブジェクトを置換または解釈処理できます。readResolveメソッドを実装することによって、クラスは、クラス自体の直列化復元されているインスタンスの型およびインスタンスを直接制御できます。このメソッドは、次のように定義します。ANY-ACCESS-MODIFIER Object readResolve() throws ObjectStreamException;readResolveメソッドは、ObjectInputStreamがストリームからオブジェクトを読み込み、呼び出し側に返す準備をしているときに呼び出されます。ObjectInputStreamは、オブジェクトのクラスによってreadResolveメソッドが定義されるかどうかを確認します。このメソッドが定義される場合は、readResolveメソッドが呼び出されて、ストリーム内のオブジェクトは、オブジェクトが返されるよう指定できるようになります。返されるオブジェクトは、すべての使用場面で互換性がある型でなければなりません。互換性がない場合は、型の不一致が発見された時点でClassCastExceptionがスローされます。たとえば、
Symbolクラスは、Virtual Machine 内で各シンボルバインディングにインスタンスが 1 つだけ存在するSymbolクラスを生成することもできます。そのシンボルがすでに定義されているかどうか、およびアイデンティティの制約を守るために、以前から存在するSymbolオブジェクトをそのシンボルに取り替えるかどうかを決定するreadResolveメソッドを実装します。このようにして、直列化におけるSymbolオブジェクトの一意性を守ることができます。