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
是否为其组件获取默认值。)
迭代操作rewind
, seek
和next
可用于改变当前位置和current_component
操作在当前位置返回组件。 component_count
操作返回一个DynAny
的组件数。 总而言之,这些操作可以对DynAny
的组件进行迭代,例如(递归)检查其内容。
构造的DynAny
对象是与构造类型相关联的DynAny
对象。 有一个不同的接口,从DynAny
接口继承,与IDL(固定,枚举,结构,序列,联合,数组,异常和值类型)中的每种构造类型相关联。 构建的DynAny
对象导出操作,可以创建新的DynAny
对象,每个对象与构造的数据值的组件相关联。 例如, DynStruct
与struct
值相关联。 这意味着DynStruct
可能被视为拥有有序的组件集合,每个结构成员一个。 DynStruct
对象导出操作,可以创建新的DynAny
对象,每个对象与struct
的成员相关联。
如果DynAny
对象已经从另一(构造)中得到DynAny
对象,例如DynAny
表示是从创建的结构构件DynStruct
,构件DynAny
逻辑包含在DynStruct
。 调用insert
或get
操作将保持当前位置不变。 销毁顶级DynAny
对象(未作为另一个DynAny
组件DynAny
对象)也会销毁DynAny
获取的任何组件DynAny
。 销毁非顶级对象DynAny
什么也不做。 对销毁的顶级DynAny
或其任何后代的调用操作会引发OBJECT_NOT_EXIST。 如果程序员想要销毁一个DynAny
对象,但是仍然想要操纵与之相关联的数据值的某个组件,那么他或她应该首先为该组件创建一个DynAny
,然后创建一个创建的DynAny
对象的副本。
已经定义了DynAny
对象的行为,以便在分配的内存空间和访问速度方面实现高效的实现。 DynAny
对象旨在用于遍历从any
提取的值或在运行时构造值为any
的值。 不建议将其用于其他目的。
处理DynAny对象
Insert
和get
操作需要处理基本的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
DynAny
和DynAnyFactory
对象意图在创建和使用它们的过程的本地。 这意味着对DynAny
和DynAnyFactory
对象的引用不能导出到其他进程,或者使用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
-
接口摘要 接口 描述 DynAny 任何值都可以动态解释(遍历)并通过DynAny对象构造。DynAnyFactory 可以通过调用DynAnyFactory对象上的操作来创建DynAny对象。DynAnyFactoryOperations 可以通过调用DynAnyFactory对象上的操作来创建DynAny对象。DynAnyOperations 任何值都可以动态解释(遍历)并通过DynAny对象构造。DynArray DynArray对象支持IDL数组的操作。DynArrayOperations DynArray对象支持IDL数组的操作。DynEnum DynEnum对象支持对IDL枚举值的操作。DynEnumOperations DynEnum对象支持对IDL枚举值的操作。DynFixed DynFixed对象支持IDL固定值的操作。DynFixedOperations DynFixed对象支持IDL固定值的操作。DynSequence DynSequence对象支持IDL序列的操作。DynSequenceOperations DynSequence对象支持IDL序列的操作。DynStruct DynStruct对象支持IDL结构和异常值的操作。DynStructOperations DynStruct对象支持IDL结构和异常值的操作。DynUnion DynUnion对象支持IDL联盟的操纵。DynUnionOperations DynUnion对象支持IDL联盟的操纵。DynValue DynValue对象支持IDL非盒装值类型的操作。DynValueBox DynValueBox对象支持IDL框值类型的操作。DynValueBoxOperations DynValueBox对象支持IDL框值类型的操作。DynValueCommon DynValueCommon提供由DynValue和DynValueBox接口支持的操作。DynValueCommonOperations DynValueCommon提供由DynValue和DynValueBox接口支持的操作。DynValueOperations DynValue对象支持IDL非盒装值类型的操作。 -
类摘要 Class 描述 _DynAnyFactoryStub 可以通过调用DynAnyFactory对象上的操作来创建DynAny对象。_DynAnyStub 任何值都可以动态解释(遍历)并通过DynAny对象构造。_DynArrayStub DynArray对象支持IDL数组的操作。_DynEnumStub DynEnum对象支持对IDL枚举值的操作。_DynFixedStub DynFixed对象支持IDL固定值的操作。_DynSequenceStub DynSequence对象支持IDL序列的操作。_DynStructStub DynStruct对象支持IDL结构和异常值的操作。_DynUnionStub DynUnion对象支持IDL联盟的操纵。_DynValueStub DynValue对象支持IDL非盒装值类型的操作。AnySeqHelper org / omg / DynamicAny / AnySeqHelper.java。DynAnyFactoryHelper 可以通过调用DynAnyFactory对象上的操作来创建DynAny对象。DynAnyHelper 任何值都可以动态解释(遍历)并通过DynAny对象构造。DynAnySeqHelper org / omg / DynamicAny / DynAnySeqHelper.java。DynArrayHelper DynArray对象支持IDL数组的操作。DynEnumHelper DynEnum对象支持对IDL枚举值的操作。DynFixedHelper DynFixed对象支持IDL固定值的操作。DynSequenceHelper DynSequence对象支持IDL序列的操作。DynStructHelper DynStruct对象支持IDL结构和异常值的操作。DynUnionHelper DynUnion对象支持IDL联盟的操纵。DynValueHelper DynValue对象支持IDL非盒装值类型的操作。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。