所有类


org.omg.DynamicAny
接口 DynAnyOperations

所有已知子接口:
DynAny, DynArray, DynArrayOperations, DynEnum, DynEnumOperations, DynFixed, DynFixedOperations, DynSequence, DynSequenceOperations, DynStruct, DynStructOperations, DynUnion, DynUnionOperations, DynValue, DynValueBox, DynValueBoxOperations, DynValueCommon, DynValueCommonOperations, DynValueOperations
所有已知实现类:
_DynAnyStub, _DynArrayStub, _DynEnumStub, _DynFixedStub, _DynSequenceStub, _DynStructStub, _DynUnionStub, _DynValueStub

public interface DynAnyOperations

通过 DynAny 对象可以动态解释(遍历)和构造 Any 值。DynAny 对象与对应于插入 any 的值的副本的数据值相关联。

DynAny 对象可视为一个有序的 DynAny 组件集合。对于表示基本类型(如 long)或没有组件的类型(如空异常)的 DynAny,有序的组件集合为空。每个 DynAny 对象在其组件 DynAny 集合中都有一个当前位置。当前位置由 0 到 n-1 的索引值标识,其中 n 为组件数。特殊索引值 -1 指示不指向任何位置的当前位置。对于不能有当前位置的值(如空异常),索引值始终为 -1。如果使用具有组件的值初始化 DynAny,则索引被初始化为 0。在创建未初始化的 DynAny(即不具有值但具有允许组件的 TypeCode 的 DynAny)之后,当前位置取决于由 DynAny 表示的值的类型。(将当前位置设置为 0 还是 -1 取决于新 DynAny 是否获取了其组件的默认值。)

迭代操作 rewind、seek 和 next 可用于更改当前位置,current_component 操作返回当前位置的组件。component_count 操作返回 DynAny 的组件数。总体上说,这些操作都能在 DynAny 的组件上进行迭代,从而能够(例如)检查其内容(递归式)。

已构造的 DynAny 对象是与构造类型关联的 DynAny 对象。还有一种从 DynAny 接口继承而来的接口,它与 IDL 中的每种构造类型(fixed、enum、struct、sequence、union、array、exception 和 value 类型)相关联。

已构造的 DynAny 对象导出支持创建新 DynAny 对象的操作,每个对象都与已构造数据值的组件相关联。例如,DynStruct 与 struct 值关联。这意味着 DynStruct 可视为拥有一个有序的组件集合,每个结构成员一个。DynStruct 对象导出支持创建新 DynAny 对象的操作,其中每个对象都与 struct 的成员关联。

如果 DynAny 对象是从另一个(已构造)DynAny 对象获取的(如表示从 DynStruct 创建的结构成员的 DynAny),则成员 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 的 TypeCode(如果 DynAny 具有组件),则该类型与插入值或析取值一致。

DynAny 和 DynAnyFactory 对象对于创建和使用它们的进程而言是本地的。这意味着不能将对 DynAny 和 DynAnyFactory 对象的引用导出到其他进程,也不能通过 ORB.object_to_string() 使其具体化。如果进行这样的尝试,则该违反规则的操作将引发 MARSHAL 系统异常。由于它们的接口是在 IDL 中指定的,所以 DynAny 对象导出在标准 org.omg.CORBA.Object 接口中定义的操作。但是,任何尝试调用通过 Object 接口导出的操作都会引发标准 NO_IMPLEMENT 异常。尝试使用带有 DII 的 DynAny 对象将引发 NO_IMPLEMENT 异常。


方法摘要
 voidassign(DynAny dyn_any)
          使用与另一个 DynAny 对象有关联的值初始化与 DynAny 对象有关联的值。
 intcomponent_count()
          返回 DynAny 的组件数。
 DynAnycopy()
          创建一个新 DynAny 对象,其值为调用此方法的 DynAny 的深层复制。
 DynAnycurrent_component()
          返回当前位置上的组件的 DynAny。
 voiddestroy()
          销毁 DynAny 对象。
 booleanequal(DynAny dyn_any)
          比较两个 DynAny 值是否相等。
 voidfrom_any(Any value)
          使用 any 中包含的值初始化与 DynAny 对象有关联的值。
 Anyget_any()
          提取由此 DynAny 表示的 Any 中所包含的 Any 值。
 booleanget_boolean()
          从此 DynAny 中提取 boolean 值。
 charget_char()
          从此 DynAny 中提取 char 值。
 doubleget_double()
          从此 DynAny 中提取 double 值。
 DynAnyget_dyn_any()
          提取由此 DynAny 表示的 Any 中所包含的 Any 值,并将其包装在新 DynAny 中返回。
 floatget_float()
          从此 DynAny 中提取 float 值。
 intget_long()
          从此 DynAny 中提取 integer 值。
 longget_longlong()
          从此 DynAny 中提取 long 值。
 byteget_octet()
          从此 DynAny 中提取 byte 值。
 Objectget_reference()
          从此 DynAny 中提取对 CORBA 对象的引用。
 shortget_short()
          从此 DynAny 中提取 short 值。
 Stringget_string()
          从此 DynAny 中提取 string 值。
 TypeCodeget_typecode()
          从此 DynAny 中提取 TypeCode 对象。
 intget_ulong()
          从此 DynAny 中提取 integer 值。
 longget_ulonglong()
          从此 DynAny 中提取 long 值。
 shortget_ushort()
          从此 DynAny 中提取 short 值。
 Serializableget_val()
          从此 DynAny 中提取 Serializable 对象。
 charget_wchar()
          从此 DynAny 中提取 long 值。
 Stringget_wstring()
          从此 DynAny 中提取 string 值。
 voidinsert_any(Any value)
          将 Any 值插入此 DynAny 表示的 Any 中。
 voidinsert_boolean(boolean value)
          将 boolean 值插入 DynAny 中。
 voidinsert_char(char value)
          将 char 值插入 DynAny 中。
 voidinsert_double(double value)
          将 double 值插入 DynAny 中。
 voidinsert_dyn_any(DynAny value)
          将参数 DynAny 中包含的 Any 值插入此 DynAny 表示的 Any 中。
 voidinsert_float(float value)
          将 float 值插入 DynAny 中。
 voidinsert_long(int value)
          将 integer 值插入 DynAny 中。
 voidinsert_longlong(long value)
          将 long 值插入 DynAny 中。
 voidinsert_octet(byte value)
          将 byte 值插入 DynAny 中。
 voidinsert_reference(Object value)
          将对 CORBA 对象的引用插入到 DynAny 中。
 voidinsert_short(short value)
          将 short 值插入 DynAny 中。
 voidinsert_string(String value)
          将 string 值插入 DynAny 中。
 voidinsert_typecode(TypeCode value)
          将 TypeCode 对象插入 DynAny 中。
 voidinsert_ulong(int value)
          将 integer 值插入 DynAny 中。
 voidinsert_ulonglong(long value)
          将 long 值插入 DynAny 中。
 voidinsert_ushort(short value)
          将 short 值插入 DynAny 中。
 voidinsert_val(Serializable value)
          将对 Serializable 对象的引用插入此 DynAny 中。
 voidinsert_wchar(char value)
          将 char 值插入 DynAny 中。
 voidinsert_wstring(String value)
          将 string 值插入 DynAny 中。
 booleannext()
          将当前位置推进到下一个组件。
 voidrewind()
          等效于 seek(0)。
 booleanseek(int index)
          将当前位置设置为索引。
 Anyto_any()
          从 DynAny 对象创建 any 值。
 TypeCodetype()
          返回与此 DynAny 对象有关联的 TypeCode。
 

方法详细信息

type

TypeCode type()
返回与此 DynAny 对象有关联的 TypeCode。DynAny 对象是通过分配给它的 TypeCode 值创建的。此 TypeCode 值确定通过 DynAny 对象处理的值的类型。注意,与 DynAny 对象关联的 TypeCode 在创建 DynAny 时初始化,在 DynAny 对象的生存期间不能更改。

返回:
与 DynAny 对象关联的 TypeCode

assign

void assign(DynAny dyn_any)
            throws TypeMismatch
使用与另一个 DynAny 对象有关联的值初始化与 DynAny 对象有关联的值。对具有组件的值,将目标 DynAny 的当前位置设置为 0,对不具有组件的值,将该位置设置为 -1。

参数:
dyn_any -
抛出:
TypeMismatch - 如果传递的 DynAny 的类型不等于目标 DynAny 的类型

from_any

void from_any(Any value)
              throws TypeMismatch,
                     InvalidValue
使用 any 中包含的值初始化与 DynAny 对象有关联的值。对具有组件的值,将目标 DynAny 的当前位置设置为 0,对不具有组件的值,将该位置设置为 -1。

抛出:
TypeMismatch - 如果所传递 Any 的类型不等于目标 DynAny 的类型
InvalidValue - 如果所传递的 Any 不包含合法值(如 null 字符串)

to_any

Any to_any()
从 DynAny 对象创建 any 值。将与 DynAny 对象关联的 TypeCode 的副本分配给所得 any。将与 DynAny 对象关联的值复制到 any 中。

返回:
具有相同值和 TypeCode 的新 Any 对象

equal

boolean equal(DynAny dyn_any)
比较两个 DynAny 值是否相等。如果两个 DynAny 值的 TypeCode 相等,则它们的值相等;以此类推,所有组件 DynAny 都具有相等的值。将比较的两个 DynAny 的当前位置不影响比较结果。

返回:
如果 DynAny 相等,则返回 true;否则返回 false

destroy

void destroy()
销毁 DynAny 对象。此操作释放所有用来表示与 DynAny 对象关联的数据值的资源。为了避免资源泄漏,此操作必须在从 ORB 接口的创建操作之一获取的引用或者 DynAny.copy() 返回的引用上调用。在组件 DynAny 对象(例如,current_component 操作返回的对象)上调用 destroy 没有任何效果。销毁 DynAny 对象意味着销毁从其获取的所有 DynAny 对象。即对已销毁 DynAny 组件的引用将变得无效。调用这种引用将引发 OBJECT_NOT_EXIST。如果在销毁可从中获取组件的 DynAny 前使用 copy 操作生成了组件的复本,则可以在该 DynAny 的生存期后操作其组件。


copy

DynAny copy()
创建一个新 DynAny 对象,其值为调用此方法的 DynAny 的深层复制。该操作是多态的,即对派生自 DynAny 的类型之一(如 DynStruct)调用该操作时,将创建派生的类型,但以 DynAny 基本类型的形式返回其引用。

返回:
DynAny 对象的深层复制