17.3.9 Anyクラスを使用して型を保護した状態で引き渡す

このクラスは,IDL指定型を保持し,タイプセーフ方式で引き渡せるようにするために使用します。

<この項の構成>
(1) C++の場合
(2) Javaの場合

(1) C++の場合

このクラスのオブジェクトは,含まれているオブジェクトの型を定義するTypeCodeのポインタと,その含まれたオブジェクトのポインタを持ちます。オブジェクトの値と型を初期化し照会するメソッドだけでなく,オブジェクトの構築,コピー,および解放を行うメソッドも提供されます。さらに,オブジェクトをストリームに書き込んだり,ストリームから読み取ったりするストリームメソッドも提供されます。コードサンプル17-14に定義例を示します。

コードサンプル17-14 Anyクラス(C++)

class Any {
  public:
     . . .
     CORBA_TypeCode_ptr type();
     void type(CORBA_TypeCode_ptr tc);
     const void *value() const;
     static CORBA::Any_ptr _nil();
     static CORBA::Any_ptr _duplicate(CORBA::Any *ptr);
     static void _release(CORBA::Any *ptr);
     . . .
}

(2) Javaの場合

このクラスのオブジェクトは,含まれているオブジェクトの型を定義するTypeCodeのリファレンスと,その含まれたオブジェクトのリファレンスを持ちます。オブジェクトの値と型を初期化し照会するメソッドだけでなく,オブジェクトの構築,コピー,および解放を行うメソッドも提供されます。さらに,オブジェクトをストリームに書き込んだり,ストリームから読み取ったりするストリームメソッドも提供されます。コードサンプル17-15に定義例を示します。

コードサンプル17-15 Anyクラス(Java)

package org.omg.CORBA;
public abstract class Any {
  public abstract TypeCode type();
  public abstract void type(TypeCode type);
  public abstract void read_value(InputStream input,
                                  TypeCode type);
  public abstract void write_value(OutputStream output);
  public abstract boolean equal(Any rhs);
  . . .
}