Java™ Platform
Standard Edition 7

パッケージ org.omg.DynamicAny

実行時に any に関連付けられたデータ値のトラバース、およびデータ値の基本的な構成要素の抽出を可能にするクラスとインタフェースを提供します。

参照: 説明

パッケージ org.omg.DynamicAny の説明

実行時に any に関連付けられたデータ値のトラバース、およびデータ値の基本的な構成要素の抽出を可能にするクラスとインタフェースを提供します。

any は、その any の型について静的な情報がない (IDL コンパイラがその型について生成したコードが、オブジェクト実装を含めてコンパイルされていない) プログラムに渡すことができます。このため、オブジェクトは any を受け取っても、それを使用するための移植性のあるメソッドがないことになります。

DynAny を使うと、any のデータ値のトラバースを実行時に行い、データ値の基本的な構成要素を抽出できます。これは、強力なジェネリックサーバー (ブリッジ、フィルタリングをサポートするイベントチャネル) を作成する場合に役立ちます。また、型に関する静的な情報を持たずに、実行時に any を構築することもできます。これは、ジェネリッククライアント (ブリッジ、ブラウザ、デバッガ、ユーザーインタフェースツール) を作成する場合に役立ちます。

Any の値は、DynAny オブジェクトを通して動的に解釈 (トラバース) および構築できます。DynAny オブジェクトはデータ値に関連付けられますが、このデータ値は Any に挿入された値のコピーに対応します。DynAny オブジェクトは、コンポーネントの DynAny の順序付けられたコレクションとみなすことができます。DynAnylong などの基本型を表す場合、または空の例外のようにコンポーネントのない型を表す場合は、コンポーネントの順序付けられたコレクションは空になります。

それぞれの DynAny オブジェクトで、その DynAny のコンポーネントのコレクション内における現在位置が把握されます。現在位置は、0 から n-1 のインデックス値で示されます (n はコンポーネントの数)。-1 という特別なインデックス値もあり、これは現在位置がどこも指し示していないことを意味します。現在位置を持つことのできない値 (空の例外など) の場合、インデックス値は -1 で固定されます。DynAny がコンポーネントを持つ値で初期化された場合、インデックスも 0 に初期化されます。初期化されていない DynAny (DynAny に値がないが、コンポーネントを持つことのできる TypeCode がある) が作成された場合は、現在位置は DynAny によって表される値の型によって異なります。現在位置は、新規作成された DynAny のコンポーネントがデフォルト値を持てるかどうかによって 0 または -1 になります。

rewindseek、および next の繰り返し操作を使用すると、現在位置が変更できます。current_component 操作は、現在位置のコンポーネントを返します。component_count 操作は DynAny のコンポーネントの数を返します。これらの操作をあわせて使用すると、コンポーネントの内容を (再帰的に) 調べるなど、DynAny のコンポーネントに対して繰り返し処理を行えます。

構築型と関連付けられた DynAny オブジェクトを、構築型 DynAny オブジェクトといいます。IDL の各種構築型 (fixed、enum、struct、sequence、union、array、exception、値型) のそれぞれについて、DynAny インタフェースから継承されたインタフェースがあります。構築型 DynAny オブジェクトは、DynAny オブジェクトを新規作成するための操作をエクスポートします。作成されるオブジェクトはそれぞれ構築型のデータ値のコンポーネントに関連付けられます。たとえば、DynStructstruct 値と関連付けられます。つまり、DynStruct は、構造体のメンバーごとにコンポーネントが 1 つずつあるような、順序付けられたコレクションを所有するとみなすことができます。DynStruct オブジェクトは、struct のメンバーに関連付けられる DynAny オブジェクトを新規作成するための操作をエクスポートします。

別の (構築型) DynAny から DynAny オブジェクトを得た場合 (たとえば DynStruct から作成された、構造体メンバーを表す DynAny)、そのメンバーである DynAny は、DynStruct に論理的に含まれることになります。insert または get 操作を呼び出しても、現在位置は変更されません。最上位の DynAny オブジェクト (別の DynAny のコンポーネントではないもの) を破棄すると、そのコンポーネントの DynAny オブジェクトも破棄されます。最上位ではない DynAny を破棄した場合は何も起こりません。破棄された最上位の DynAny、またはその下位オブジェクトに対して操作を呼び出すと、OBJECT_NOT_EXIST がスローされます。DynAny を破棄したあとも、それに関連付けられるデータ値のコンポーネントを操作するには、まずコンポーネントの DynAny を作成してから、作成した DynAny オブジェクトのコピーを作成します。

DynAny オブジェクトの動作は、割り当てられたメモリー空間とアクセス速度に関して効果的な実装を実現できるように定義されています。DynAny オブジェクトは、実行時に any から抽出された値のトラバースや、any の値の構築を行うために使用することが想定されています。ほかの用途での使用はお勧めできません。

DynAny オブジェクトの操作

Insertget の各操作は、基本 DynAny オブジェクトの操作に必要ですが、構築型 DynAny オブジェクトの操作にも役立ちます。構築型 DynAny オブジェクトに基本データ型の値を挿入すると、DynAny オブジェクトに関連付けられた構築型データ値の現在のコンポーネントを初期化することになります。たとえば、DynStructinsert_boolean を呼び出すと、関連する struct のデータ値の現在位置に boolean のデータ値が挿入されます。値の TypeCodeDynAny に含まれる TypeCode と同じである場合、値の挿入と抽出を通して型は同じになります。DynAny にコンポーネントがある場合は、値の挿入と抽出における型は現在位置の DynAnyTypeCode と同じになります。

基本的なオペレーションには次のものがあります。

DynAny オブジェクトと DynAnyFactory オブジェクトは、それらが作成および使用されるプロセスに対してローカルであると想定されています。つまり、DynAny および DynAnyFactory オブジェクトへの参照をほかのプロセスにエクスポートしたり、ORB.object_to_string() で外部化したりすることはできません。実行を試みると MARSHAL システム例外が発生します。IDL にインタフェースが指定されているため、DynAny オブジェクトでは標準の org.omg.CORBA.Object インタフェースに定義されている操作をエクスポートできます。ただし、Object インタフェースを通してエクスポートした操作を呼び出そうとすると、標準 NO_IMPLEMENT 例外が発生することがあります。DynAny オブジェクトを DII と使用しようとすると、NO_IMPLEMENT 例外が発生する場合があります。

パッケージの仕様

Java(TM) Platform, Standard Edition 6 ORB が準拠する公式の仕様のサポートセクションの正確なリストは、「Java(TM) SE 6 での正式な CORBA サポート仕様」を参照してください。

導入されたバージョン:
1.4
Java™ Platform
Standard Edition 7

バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.