any
有关联的数据值,并提取数据值的基本成分。
请参见:
描述
接口摘要 | |
---|---|
DynAny | 通过 DynAny 对象可以动态解释(遍历)和构造 Any 值。 |
DynAnyFactory | DynAny 对象可以通过调用 DynAnyFactory 对象上的操作来创建。 |
DynAnyFactoryOperations | DynAny 对象可以通过调用 DynAnyFactory 对象上的操作来创建。 |
DynAnyOperations | 通过 DynAny 对象可以动态解释(遍历)和构造 Any 值。 |
DynArray | DynArray 对象支持对 IDL 数组的操作。 |
DynArrayOperations | DynArray 对象支持对 IDL 数组的操作。 |
DynEnum | DynEnum 对象支持对 IDL 枚举值的操作。 |
DynEnumOperations | DynEnum 对象支持对 IDL enumerated value 的操作。 |
DynFixed | DynFixed 对象支持对 IDL 定值 (fixed value) 的操作。 |
DynFixedOperations | DynFixed 对象支持对 IDL 定值的操作。 |
DynSequence | DynSequence 对象支持对 IDL 序列的操作。 |
DynSequenceOperations | DynSequence 对象支持对 IDL 序列的操作。 |
DynStruct | DynStruct 对象支持对 IDL 结构数据 (struct) 和异常值的操作。 |
DynStructOperations | DynStruct 对象支持对 IDL 结构数据 (struct) 和异常 (exception) 值的操作。 |
DynUnion | DynUnion 对象支持对 IDL 联合 (union) 的操作。 |
DynUnionOperations | DynUnion 对象支持对 IDL 联合数据 (union) 的操作。 |
DynValue | DynValue 对象支持对 IDL 非装箱 (non-boxed) 值类型的操作。 |
DynValueBox | DynValueBox 对象支持对 IDL 装箱 (boxed) 类型的操作。 |
DynValueBoxOperations | DynValueBox 对象支持对 IDL 装箱 (boxed) 类型的操作。 |
DynValueCommon | DynValueCommon 提供 DynValue 和 DynValueBox 接口都支持的操作。 |
DynValueCommonOperations | DynValueCommon 提供 DynValue 和 DynValueBox 接口都支持的操作。 |
DynValueOperations | DynValue 对象支持对 IDL 非装箱 (boxed) 值类型的支持。 |
类摘要 | |
---|---|
_DynAnyFactoryStub | DynAny 对象可以通过调用 DynAnyFactory 对象上的操作来创建。 |
_DynAnyStub | 通过 DynAny 对象可以动态解释(遍历)和构造 Any 值。 |
_DynArrayStub | DynArray 对象支持对 IDL 数组 (array) 的操作。 |
_DynEnumStub | DynEnum 对象支持对 IDL 枚举 (enumerated) 值的操作。 |
_DynFixedStub | DynEnum 对象支持对 IDL 定值 (fixed value) 的操作。 |
_DynSequenceStub | DynSequence 对象支持对 IDL 序列 (sequence) 的操作。 |
_DynStructStub | DynStruct 对象支持对 IDL 结构数据 (struct) 和异常值的操作。 |
_DynUnionStub | DynUnion 对象支持对 IDL 联合数据 (union) 的操作。 |
_DynValueStub | DynValue 对象支持 IDL non-boxed value 类型的操作。 |
AnySeqHelper | org/omg/DynamicAny/AnySeqHelper.java。 |
DynAnyFactoryHelper | DynAny 对象可以通过调用 DynAnyFactory 对象上的操作来创建。 |
DynAnyHelper | 通过 DynAny 对象可以动态解释(遍历)和构造 Any 值。 |
DynAnySeqHelper | org/omg/DynamicAny/DynAnySeqHelper.java。 |
DynArrayHelper | DynArray 对象支持对 IDL 数组的操作。 |
DynEnumHelper | DynEnum 对象支持对 IDL 枚举值的操作。 |
DynFixedHelper | DynFixed 对象支持对 IDL 定值 (fixed value) 的操作。 |
DynSequenceHelper | DynSequence 对象支持对 IDL 序列的操作。 |
DynStructHelper | DynStruct 对象支持对 IDL 结构数据 (struct) 和异常值的操作。 |
DynUnionHelper | DynUnion 对象支持对 IDL 联合数据 (union) 的操作。 |
DynValueHelper | DynValue 对象支持对 IDL 非装箱 (non-boxed) 值类型的操作。 |
FieldNameHelper | org/omg/DynamicAny/FieldNameHelper.java。 |
NameDynAnyPair | org/omg/DynamicAny/NameDynAnyPair.java。 |
NameDynAnyPairHelper | org/omg/DynamicAny/NameDynAnyPairHelper.java。 |
NameDynAnyPairSeqHelper | org/omg/DynamicAny/NameDynAnyPairSeqHelper.java。 |
NameValuePair | org/omg/DynamicAny/NameValuePair.java。 |
NameValuePairHelper | org/omg/DynamicAny/NameValuePairHelper.java。 |
NameValuePairSeqHelper | org/omg/DynamicAny/NameValuePairSeqHelper.java。 |
提供一些类和接口使得在运行时能够遍历与 any
有关联的数据值,并提取数据值的基本成分。
可以将 any
传递给不具有任何有关 any
类型的静态信息的程序(由 IDL 编译器生成的该类型代码没有经过对象实现的编译)。结果,接收 any
的对象不具有使用它的可移植方法。
DynAny
允许在运行时遍历与 any
有关联的数据值,并提取数据值的基本成分。它在编写功能强大的常规服务器程序(支持过滤的桥梁、事件通道)时非常有用。类似地,此设施允许在运行时构造 any
,无需具备其类型的静态知识。它在编写常规客户端程序(桥梁、浏览器、用户界面工具)时非常有用。
Any
值可以通过 DynAny 对象进行动态解释(遍历)和构造。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 异常。
有关 Java[tm] Platform, Standard Edition 6 ORB 遵守的官方规范的受支持部分的明确列表,请参阅 Official Specifications for CORBA support in Java[tm] SE 6。