public interface DynAnyOperations
通过 DynAny 对象可以动态解释(遍历)和构造 Any 值。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 异常。
方法摘要 | |
---|---|
void |
assign(DynAny dyn_any) 使用与另一个 DynAny 对象有关联的值初始化与 DynAny 对象有关联的值。 |
int |
component_count() 返回 DynAny 的组件数。 |
DynAny |
copy() 创建一个新 DynAny 对象,其值为调用此方法的 DynAny 的深层复制。 |
DynAny |
current_component() 返回当前位置上的组件的 DynAny。 |
void |
destroy() 销毁 DynAny 对象。 |
boolean |
equal(DynAny dyn_any) 比较两个 DynAny 值是否相等。 |
void |
from_any(Any value) 使用 any 中包含的值初始化与 DynAny 对象有关联的值。 |
Any |
get_any() 提取由此 DynAny 表示的 Any 中所包含的 Any 值。 |
boolean |
get_boolean() 从此 DynAny 中提取 boolean 值。 |
char |
get_char() 从此 DynAny 中提取 char 值。 |
double |
get_double() 从此 DynAny 中提取 double 值。 |
DynAny |
get_dyn_any() 提取由此 DynAny 表示的 Any 中所包含的 Any 值,并将其包装在新 DynAny 中返回。 |
float |
get_float() 从此 DynAny 中提取 float 值。 |
int |
get_long() 从此 DynAny 中提取 integer 值。 |
long |
get_longlong() 从此 DynAny 中提取 long 值。 |
byte |
get_octet() 从此 DynAny 中提取 byte 值。 |
Object |
get_reference() 从此 DynAny 中提取对 CORBA 对象的引用。 |
short |
get_short() 从此 DynAny 中提取 short 值。 |
String |
get_string() 从此 DynAny 中提取 string 值。 |
TypeCode |
get_typecode() 从此 DynAny 中提取 TypeCode 对象。 |
int |
get_ulong() 从此 DynAny 中提取 integer 值。 |
long |
get_ulonglong() 从此 DynAny 中提取 long 值。 |
short |
get_ushort() 从此 DynAny 中提取 short 值。 |
Serializable |
get_val() 从此 DynAny 中提取 Serializable 对象。 |
char |
get_wchar() 从此 DynAny 中提取 long 值。 |
String |
get_wstring() 从此 DynAny 中提取 string 值。 |
void |
insert_any(Any value) 将 Any 值插入此 DynAny 表示的 Any 中。 |
void |
insert_boolean(boolean value) 将 boolean 值插入 DynAny 中。 |
void |
insert_char(char value) 将 char 值插入 DynAny 中。 |
void |
insert_double(double value) 将 double 值插入 DynAny 中。 |
void |
insert_dyn_any(DynAny value) 将参数 DynAny 中包含的 Any 值插入此 DynAny 表示的 Any 中。 |
void |
insert_float(float value) 将 float 值插入 DynAny 中。 |
void |
insert_long(int value) 将 integer 值插入 DynAny 中。 |
void |
insert_longlong(long value) 将 long 值插入 DynAny 中。 |
void |
insert_octet(byte value) 将 byte 值插入 DynAny 中。 |
void |
insert_reference(Object value) 将对 CORBA 对象的引用插入到 DynAny 中。 |
void |
insert_short(short value) 将 short 值插入 DynAny 中。 |
void |
insert_string(String value) 将 string 值插入 DynAny 中。 |
void |
insert_typecode(TypeCode value) 将 TypeCode 对象插入 DynAny 中。 |
void |
insert_ulong(int value) 将 integer 值插入 DynAny 中。 |
void |
insert_ulonglong(long value) 将 long 值插入 DynAny 中。 |
void |
insert_ushort(short value) 将 short 值插入 DynAny 中。 |
void |
insert_val(Serializable value) 将对 Serializable 对象的引用插入此 DynAny 中。 |
void |
insert_wchar(char value) 将 char 值插入 DynAny 中。 |
void |
insert_wstring(String value) 将 string 值插入 DynAny 中。 |
boolean |
next() 将当前位置推进到下一个组件。 |
void |
rewind() 等效于 seek(0)。 |
boolean |
seek(int index) 将当前位置设置为索引。 |
Any |
to_any() 从 DynAny 对象创建 any 值。 |
TypeCode |
type() 返回与此 DynAny 对象有关联的 TypeCode。 |
方法详细信息 |
---|
TypeCode type()
void assign(DynAny dyn_any) throws TypeMismatch
dyn_any
-
TypeMismatch
- 如果传递的 DynAny 的类型不等于目标 DynAny 的类型
void from_any(Any value) throws TypeMismatch, InvalidValue
TypeMismatch
- 如果所传递 Any 的类型不等于目标 DynAny 的类型
InvalidValue
- 如果所传递的 Any 不包含合法值(如 null 字符串)
Any to_any()
boolean equal(DynAny dyn_any)
void destroy()
DynAny copy()
void insert_boolean(boolean value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_octet(byte value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_char(char value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_short(short value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_ushort(short value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_long(int value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_ulong(int value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_float(float value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_double(double value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_string(String value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
InvalidValue
- 如果插入的字符串的长度超出有界字符串的界限
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_reference(Object value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_typecode(TypeCode value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_longlong(long value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_ulonglong(long value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_wchar(char value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_wstring(String value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
InvalidValue
- 如果插入的字符串的长度超出有界字符串的界限
TypeMismatch
void insert_any(Any value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_dyn_any(DynAny value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
void insert_val(Serializable value) throws TypeMismatch, InvalidValue
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
boolean get_boolean() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
byte get_octet() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
char get_char() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
short get_short() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
short get_ushort() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
int get_long() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
int get_ulong() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
float get_float() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
double get_double() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
String get_string() throws TypeMismatch, InvalidValue
TypeMismatch
- 如果在 DynAny 中访问的组件类型不等于所请求的类型。
TypeMismatch
- 如果在其当前组件本身也有组件的 DynAny 上调用此方法
InvalidValue
- 如果此 DynAny 具有组件,但当前位置为 -1
Object get_reference() throws TypeMismatch, InvalidValue