Skip navigation links
Java™ Platform
Standard Ed. 8

Package org.omg.DynamicAny

提供类和,使与相关联的数据值的遍历接口 any的数据值的基本成分在运行时,和提取。

See: 描述

Package org.omg.DynamicAny Description

提供类和,使与相关联的数据值的遍历接口any的数据值的基本成分在运行时,和提取。

一个any可以传递给不具有对的类型的任何静态信息的节目any (用于由IDL编译器类型生成的代码没有被编译与对象实现)。 其结果是,在接收到该对象any没有使用它的便携式方法。

DynAny小号使与相关联的数据值的遍历any的数据值的基本成分在运行时,和提取。 这对于编写强大的通用服务器(桥接器,支持过滤的事件通道)尤其有用。 类似地,该设施能够在运行时构建一个any ,而不具有其类型的静态知识。 这对于编写通用客户端(网桥,浏览器,调试器,用户界面工具)尤其有用。

Any值可以通过DynAny对象进行动态解释(遍历)并构建。 A DynAny对象与对应于插入到Any中的值的副本的数据值相关 A DynAny对象可以被视为组件DynAny的有序集合。 对于表示基本类型的DynAny,例如long ,或者是没有组件的类型,例如空的异常,组件的有序集合是空的。

每个DynAny对象维护一个当前位置的概念引入其收集组件DynAny个 S的。 当前位置由从0到n-1运行的索引值来标识,其中n是组件的数量。 特殊索引值-1表示当前位置。 对于不能具有当前位置的值(如空异常),索引值固定为-1。 如果DynAny与具有分量的值进行初始化,则索引被初始化为0创建一个未初始化的后DynAny (即, DynAny不具有任何值,但一个TypeCode允许成分),当前位置取决于类型的价值由DynAny (当前位置设置为0或-1,具体取决于新的DynAny是否DynAny获取默认值。)

迭代操作rewindseeknext可用于改变当前位置和current_component操作在当前位置返回组件。 component_count操作返回一个DynAny 总而言之,这些操作可以对DynAny的组件进行DynAny ,例如(递归)检查其内容。

构造的DynAny对象是与构造类型相关DynAny对象。 有一个不同的接口,从DynAny继承,与IDL(固定,枚举,结构,序列,联合,数组,异常和值类型)中的每种构造类型相关联。 构建的DynAny对象导出操作,可以创建新的DynAny对象,每个对象与构造的数据值的组件相关联。 作为一个例子,一个DynStruct与相关联struct值。 这意味着DynStruct可能被视为拥有一个有序的组件集合,每个结构成员一个。 DynStruct对象导出操作,可以创建新的DynAny对象,每个对象与struct的成员相关struct

如果DynAny对象已经从另一(构造)中得到DynAny对象,如DynAny表示是从创建的结构构件DynStruct ,所述构件DynAny被逻辑地包含在DynStruct 调用insertget操作将保持当前位置不变。 销毁顶级DynAny对象(未作为另一个DynAny组件DynAny对象)也会销毁DynAny获取的任何组件DynAny 销毁非顶级DynAny对象什么也不做。 对被毁坏的顶级DynAny或其任何后代进行调用操作会引发OBJECT_NOT_EXIST。 如果程序员想要销毁一个DynAny对象,但仍然想要操作与之相关联的数据值的某个组件,那么他或她应该首先为该DynAny创建一个DynAny ,然后创建一个创建的DynAny对象的副本。

已经定义了DynAny对象的行为,以便在分配的存储器空间和访问速度方面实现有效的实现。 DynAny对象旨在用于遍历从any s提取的值或在运行时any s的值。 不建议将其用于其他目的。

处理DynAny对象

Insertget操作是处理基本的DynAny对象所必需的,但也有助于处理构造的DynAny对象。 插入一个基本数据类型值成构造DynAny对象意味着初始化与所述相关联的构造的数据值的电流分量DynAny对象。 例如,调用insert_boolean上的DynStruct意味着插入boolean在相关联的当前位置的数据值struct数据值。 如果TypeCode TypeCode DynAny中包含的DynAny或者如果DynAny具有组件,则类型与插入或提取值是一致的, TypeCode当前位置的TypeCodeDynAny

基本操作包括:

DynAnyDynAnyFactory对象旨在在其创建和使用它们的进程的本地。 这意味着对DynAnyDynAnyFactory对象的引用无法导出到其他进程,或者外部ORB.object_to_string() 如果尝试这样做,违规行为会引发MARSHAL系统异常。 由于它们的接口在IDL中DynAnyDynAny对象导出操作在标准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
Skip navigation links
Java™ Platform
Standard Ed. 8