JavaTM Platform
Standard Ed. 6

软件包 org.omg.DynamicAny

提供一些类和接口使得在运行时能够遍历与 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。
 

软件包 org.omg.DynamicAny 的描述

提供一些类和接口使得在运行时能够遍历与 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(即不具有值但具有允许组件的 TypeCodeDynAny)之后,当前位置取决于由 DynAny 表示的值的类型。(将当前位置设置为 0 还是 -1 取决于新 DynAny 是否获取了其组件的默认值。)

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

已构造的 DynAny 对象是与构造类型关联的 DynAny 对象。还有一种从 DynAny 接口继承而来的接口,它与 IDL 中的每种构造类型(fixed、enum、struct、sequence、union、array、exception 和 value 类型)相关联。已构造的 DynAny 对象导出支持创建新 DynAny 对象的操作,每个对象都与已构造数据值的组件相关联。例如,DynStructstruct 值相关联。这意味着 DynStruct 可视为拥有一个有序的组件集合,每个结构成员一个。DynStruct 对象导出支持创建新 DynAny 对象的操作,其中每个对象都与 struct 的成员有关联。

如果 DynAny 对象是从另一个(已构造)DynAny 对象获取的(如表示从 DynStruct 创建的结构成员的 DynAny),则成员 DynAny 在逻辑上包含在 DynStruct 中。调用 insertget 操作不更改当前位置。销毁顶级 DynAny 对象(不是作为另一个 DynAny 的组件获取的)将同时销毁从其获取的所有 DynAny 对象组件。销毁非顶级 DynAny 对象的操作没有任何效果。在已销毁的顶级 DynAny 或其任何子代上调用操作将引发 OBJECT_NOT_EXIST。如果程序员要销毁 DynAny 对象,但还需要操作与其关联的数据值的某个组件,则应该首先为该组件创建一个 DynAny,然后生成所创建的 DynAny 对象的副本。

为了支持高效实现,根据分配的内存空间和存取速度定义 DynAny 对象的行为。DynAny 对象旨在用于遍历从 any 提取的值,或用于在运行时构造 any 的值。不建议将其用于其他目的。

处理 DynAny 对象

Insertget 操作是处理基本 DynAny 对象所必需的,但是也可以使用它们来处理已构造的 DynAny 对象。将基本数据类型值插入已构造的 DynAny 对象意味着初始化与 DynAny 对象关联的已构造数据值的当前组件。例如,对 DynStruct 调用 insert_boolean 意味着在关联的 struct 数据值的当前位置插入 boolean 数据值。如果某个类型的 TypeCode 等效于 DynAny 中包含的 TypeCode,或者等效于处于当前位置的 DynAnyTypeCode(如果 DynAny 有组件),则该类型与插入值或提取值一致。

基本操作包括:

DynAnyDynAnyFactory 对象对于创建和使用它们的进程而言是本地的。这意味着,不能将对 DynAnyDynAnyFactory 对象的引用导出到其他进程,也不能通过 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

从以下版本开始:
1.4

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策