JavaTM 2 Platform
Standard Ed. 6

org.omg.DynamicAny
类 DynAnyHelper

java.lang.Object
  继承者 org.omg.DynamicAny.DynAnyHelper

public abstract class DynAnyHelper
extends Object

通过 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 异常。


构造方法摘要
DynAnyHelper()
           
 
方法摘要
static DynAny extract(Any a)
           
static String id()
           
static void insert(Any a, DynAny that)
           
static DynAny narrow(Object obj)
           
static DynAny read(InputStream istream)
           
static TypeCode type()
           
static DynAny unchecked_narrow(Object obj)
           
static void write(OutputStream ostream, DynAny value)
           
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

DynAnyHelper

public DynAnyHelper()
方法详细信息

insert

public static void insert(Any a,
                          DynAny that)

extract

public static DynAny extract(Any a)

type

public static TypeCode type()

id

public static String id()

read

public static DynAny read(InputStream istream)

write

public static void write(OutputStream ostream,
                         DynAny value)

narrow

public static DynAny narrow(Object obj)

unchecked_narrow

public static DynAny unchecked_narrow(Object obj)

JavaTM 2 Platform
Standard Ed. 6

提交错误或意见

版权所有 2008 Sun Microsystems, Inc. 保留所有权利。请遵守GNU General Public License, version 2 only