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