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, 2014, Oracle and/or its affiliates. All rights reserved.