Module  java.corba

Package org.omg.DynamicAny

提供类和接口,可以在运行时遍历与any相关联的数据值,并提取数据值的原始组成部分。

一个any可以传递给一个程序,该程序没有任何类型的静态信息any (为IDL编译器为类型生成的代码尚未编译与对象实现)。 结果,接收any的对象没有使用便携式的方法。

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

可以通过DynAny对象动态解释(遍历)和构造Any值。 一个DynAny对象与一个数据值相关联,该数据值对应于插入Any的值的Any A DynAny对象可以被视为组件DynAny的有序集合。 DynAny代表中国一个基本类型,例如long ,或没有组件的类型,如空异常,部件的有序集合为空。

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

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

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

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

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

处理DynAny对象

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

基本操作包括:

  • insert_boolean,get_boolean
  • insert_char,get_char
  • insert_short,get_short
  • insert_ushort,get_ushort
  • insert_long,get_long
  • insert_ulong,get_ulong
  • insert_double,get_double
  • insert_string,get_string
  • insert_reference,get_reference
  • insert_typecode,get_typecode
  • insert_longlong,get_longlong
  • insert_ulonglong,get_ulonglong
  • insert_longdouble,get_longdouble
  • insert_wchar,get_wchar
  • insert_wstring,get_wstring
  • insert_any,get_any
  • insert_dyn_any,get_dyn_any
  • insert_val,get_val
  • insert_octet,get_octet
  • insert_float,get_float
  • 的get_value
  • get_as_string
  • get_as_ulong
  • get_members
  • get_members_as_dyn_any
  • get_discriminator
  • get_length
  • get_elements
  • get_elements_as_dyn_any
  • get_boxed_value
  • get_boxed_value_as_dyn_any

DynAnyDynAnyFactory对象意图在创建和使用它们的过程的本地。 这意味着对DynAnyDynAnyFactory对象的引用不能导出到其他进程,或者使用ORB.object_to_string()外部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