10.4.11 オブジェクトリファレンスのナロウイング

オブジェクトリファレンスのタイプを一般的なスーパータイプから特定のサブタイプに変更するプロセスをナロウイングといいます。

注1(C++の場合)
_narrow()メソッドは,新しいC++オブジェクトを構築し,そのオブジェクトのポインタを返します。オブジェクトがもう必要なければ,_narrow()メソッドで返されたオブジェクトリファレンスを解放する必要があります。
注2(Javaの場合)
ナロウイングにJavaキャスティング機能は使用できません。

Borland Enterprise Server VisiBrokerでは,オブジェクトのnarrow()メソッドを使用してナロウイングができるように,それぞれのオブジェクトインタフェースのタイプグラフを保持しています。

C++の場合
narrowメソッドが要求したタイプにオブジェクトをナロウできないと判定した場合,NULLを返します。
Javaの場合
ナロウイングが失敗すると,IDL例外であるCORBA::BAD_PARAM例外が返されます。それはオブジェクトリファレンスがリクエストされたタイプをサポートしていないためです。
コードサンプル10-13 AccountManager用に生成されたnarrowメソッド(C++)

Bank::AccountManager_ptr
Bank::AccountManager::_narrow(CORBA::Object * _obj) {
                  :
}

コードサンプル10-14 AccountManager用に生成されたnarrowメソッド(Java)

public abstract class AccountManagerHelper {
  . . .
  public static Bank.AccountManager narrow (
                              org.omg.CORBA.Object object){
     . . .
  }
  . . .
}