public abstract class DynAnyHelper extends Object
DynAny オブジェクトは、コンポーネントの DynAny の順序付けられたコレクションとみなすことができます。DynAny が long などの基本型を表す場合、または空の例外のようにコンポーネントのない型を表す場合は、コンポーネントの順序付けられたコレクションは空になります。それぞれの DynAny オブジェクトで、その DynAny のコンポーネントのコレクション内における現在位置が把握されます。現在位置は、0 から n-1 のインデックス値で示されます (n はコンポーネントの数)。-1 という特別なインデックス値もあり、これは現在位置がどこも指し示していないことを意味します。現在位置を持つことのできない値 (空の例外など) の場合、インデックス値は -1 で固定されます。DynAny がコンポーネントを持つ値で初期化された場合、インデックスも 0 に初期化されます。初期化されていない DynAny (DynAny に値がないが、コンポーネントを持つことのできる TypeCode がある) が作成された場合は、現在位置は DynAny によって表される値の型によって異なります。新規作成された DynAny のコンポーネントがデフォルト値を持てるかどうかによって 0 または -1 になります。
rewind、seek、および next の繰り返し操作を使用すると、現在位置が変更できます。current_component 操作は、現在位置のコンポーネントを返します。component_count 操作は DynAny のコンポーネントの数を返します。これらの操作を併せて使用すると、コンポーネントの内容を (再帰的に) 調べるなど、DynAny のコンポーネントに対して繰り返し処理を行えます。
構築型と関連付けられた DynAny オブジェクトを、構築型 DynAny オブジェクトといいます。IDL の各種構築型 (fixed、enum、struct、sequence、union、array、exception、値型) のそれぞれについて、DynAny インタフェースから継承されたインタフェースがあります。
構築型 DynAny オブジェクトは、DynAny オブジェクトを新規作成するための操作をエクスポートします。作成されるオブジェクトはそれぞれ構築型のデータ値のコンポーネントに関連付けられます。たとえば、DynStruct は struct 値と関連付けられます。つまり、DynStruct は、構造体のメンバーごとにコンポーネントが 1 つずつあるような、順序付けられたコレクションを所有するとみなすことができます。DynStruct オブジェクトは、struct のメンバーに関連付けられる DynAny オブジェクトを新規作成するための操作をエクスポートします。
別の (構築型) DynAny から DynAny オブジェクトを得た場合、たとえば DynStruct から作成された、構造体メンバーを表す DynAny は、DynStruct に論理的に含まれることになります。insert または get 操作を呼び出しても、現在位置は変更されません。最上位の DynAny オブジェクト (別の DynAny のコンポーネントではないもの) を破棄すると、そのコンポーネントの DynAny も破棄されます。最上位ではない DynAny を破棄した場合は何も起こりません。破棄された最上位の DynAny、またはその下位オブジェクトに対して操作を呼び出すと、OBJECT_NOT_EXIST がスローされます。DynAny を破棄したあとも、それに関連付けられるデータ値のコンポーネントを操作するには、まずコンポーネントの DynAny を作成してから、作成した DynAny オブジェクトのコピーを作成します。
DynAny オブジェクトの動作は、割り当てられたメモリー空間とアクセス速度に関して効果的な実装を実現できるように定義されています。DynAny オブジェクトは、実行時に any から抽出された値のトラバースや、any の値の構築を行うために使用することが想定されています。ほかの用途での使用はお勧めできません。
insert と get の各操作は、基本 DynAny オブジェクトの操作に必要ですが、構築型 DynAny オブジェクトの操作にも役立ちます。構築型 DynAny オブジェクトに基本データ型の値を挿入すると、DynAny オブジェクトに関連付けられた構築型データ値の現在のコンポーネントを初期化することになります。たとえば、DynStruct で insert_boolean を呼び出すと、関連する struct のデータ値の現在位置に boolean のデータ値が挿入されます。値の TypeCode が DynAny に含まれる TypeCode と同じである場合、値の挿入と抽出を通して型は同じになります。DynAny にコンポーネントがある場合は、値の挿入と抽出における型は現在位置の DynAny の TypeCode と同じになります。
DynAny オブジェクトと DynAnyFactory オブジェクトは、それらが作成および使用されるプロセスに対してローカルであると想定されています。つまり、DynAny および DynAnyFactory オブジェクトへの参照をほかのプロセスにエクスポートしたり、ORB.object_to_string() で外部化したりすることはできません。実行を試みると MARSHAL システム例外が発生します。IDL にインタフェースが指定されているため、DynAny オブジェクトでは標準の org.omg.CORBA.Object インタフェースに定義されている操作をエクスポートできます。ただし、Object インタフェースを通してエクスポートした操作を呼び出そうとすると、標準 NO_IMPLEMENT 例外が発生することがあります。DynAny オブジェクトを DII と使用しようとすると、NO_IMPLEMENT 例外が発生する場合があります。
コンストラクタと説明 |
---|
DynAnyHelper() |
修飾子と型 | メソッドと説明 |
---|---|
static DynAny |
extract(Any a) |
static String |
id() |
static void |
insert(Any a, DynAny that) |
static DynAny |
narrow(Object obj) |
static DynAny |
read(InputStream istream) |
static TypeCode |
type() |
static DynAny |
unchecked_narrow(Object obj) |
static void |
write(OutputStream ostream, DynAny value) |
public static TypeCode type()
public static String id()
public static DynAny read(InputStream istream)
public static void write(OutputStream ostream, DynAny value)
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.