青色のバー

直列化と writeReplace/readResolve メソッド

青色のバー

概説

この例題では writeReplace/readResolve メソッドの使い方を示します。readResolve メソッドは、ストリームから読み取られたオブジェクトが呼び出し元に返される前に、解釈処理を行います。writeReplace メソッドを使用すると、オブジェクトの書き込みが行われる前に、そのオブジェクトの Serializable クラスがストリーム内での自らの置き換えを指定できます。

この例題では、各シンボルバインディングにインスタンスが 1 つだけ存在するシンボルクラスを生成します。Symbol クラスは readResolve メソッドを定義します。symbollookup メソッドを使用して、外部から 1 つのシンボルが生成されます。symbollookup メソッドは、シンボルがすでに存在する場合はそのシンボルを検出して返し、シンボルが存在しない場合はシンボルを生成します。これにより、1つの VM 内でシンボルの一意性が保証されます。次に、シンボルを読み出すために readResolve メソッドが呼び出されると、ハッシュテーブルに等価なシンボルオブジェクトがすでにある場合は、一意性の制限を守るために既存のオブジェクトで代用されます。既存のオブジェクトがない場合は、新しいシンボルがハッシュテーブルに追加されてから返されます。これにより、複数の VM がシンボルを扱うときの一意性が保証されます。

青色のバー

関連情報

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