JavaTM 2
Platform
Std. Ed. v1.4.0

org.omg.DynamicAny
クラス DynAnyHelper

java.lang.Object
  |
  +--org.omg.DynamicAny.DynAnyHelper

public abstract class DynAnyHelper
extends Object

Any の値は、DynAny オブジェクトを通して動的に解釈 (トラバース) および構築することができます。DynAny オブジェクトは、any に挿入される値のコピーに対応するデータ値に関連付けられます。

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 void write(OutputStream ostream, DynAny value)
           
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

DynAnyHelper

public DynAnyHelper()
メソッドの詳細

insert

public static void insert(Any a,
                          DynAny that)

extract

public static DynAny extract(Any a)

type

public static TypeCode type()

id

public static String id()

read

public static DynAny read(InputStream istream)

write

public static void write(OutputStream ostream,
                         DynAny value)

narrow

public static DynAny narrow(Object obj)

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.