10.4.8 オブジェクトリファレンスのタイプの判定
- C++の場合
-
ユーザは_hash()メソッドを使用して,オブジェクトリファレンスのハッシュ値を取得できます。この値は一意であるとは限りませんが,オブジェクトリファレンスのライフスパンを通して一定の値を保ちます。そして,この値はハッシュテーブルに格納されます。
オブジェクトリファレンスが特定のタイプかどうかは,_is_a()メソッド(C++およびJava)を使用してチェックできます。最初に,_repository_id()メソッド(C++およびJava)を使用して,チェックしたいタイプのリポジトリIDを取得する必要があります。このメソッドは,オブジェクトが_repository_id()メソッドで表されるタイプのインスタンスか,サブタイプであれば,1(C++)またはtrue(Java)を返します。オブジェクトが指定のタイプでなければ,0(C++)またはfalse(Java)を返します。このとき,タイプを判定するためにリモート呼び出しが必要な場合があるので注意してください。
- 注(Javaの場合)
-
instanceofキーワードはランタイムタイプの判定には使用できません。
二つのオブジェクトリファレンスが同じオブジェクトインプリメンテーションを参照するかどうかのチェックには,_is_equivalent()メソッド(C++およびJava)を使用します。このメソッドは,これらのオブジェクトリファレンスが等しければ1(C++)またはtrue(Java)を返します。オブジェクトリファレンスが異なるなら,このメソッドは0(C++)またはfalse(Java)を返しますが,オブジェクトリファレンスが二つの異なったオブジェクトであるということを示すとは限りません。これはライトウェイトメソッドであり,サーバオブジェクトとの実際の通信は必要としません。オブジェクトリファレンスのタイプを判定するメソッドを表10-3に示します。