目次 | 前の項目 | 次の項目 Java オブジェクト直列化仕様


3.6 readResolve メソッド

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 オブジェクトの一意性を守ることができます。



目次 | 前の項目 | 次の項目
Copyright © 1997-1998 Sun Microsystems, Inc. All Rights Reserved.