2.5.2 Holderクラス
Holderクラスは,OUTおよびINOUTパラメタ受け渡しモードをサポートし,org.omg.CORBAパッケージのすべての基本IDLデータ型で利用できます。Holderクラスは,typedefsで定義されたものを除いて,すべての名前付きユーザ定義型で生成されます。Holderクラスの詳細については,「3. 生成されるインタフェースとクラス(Java)」を参照してください。
ユーザ定義IDL型では,Holderクラス名は,その型のマッピングされたJava名の後ろにHolderを付けて構成されます。
基本IDLデータ型では,マッピングされたデータ型に対するJava型名(最初の文字が大文字)の後ろにHolderを付けたHolderクラス名になります。例えば,IntHolderがそうです。
各Holderクラスには,インスタンスからのコンストラクタ,デフォルトコンストラクタがあり,型付きのvalueというパブリックインスタンスメンバがあります。デフォルトコンストラクタは,Java言語によって定義されたように,値フィールドを型のデフォルト値に設定します。
-
boolean:false
-
値型:null
-
数値とchar型:0
-
文字列:null
-
オブジェクトリファレンス:null
ポータブルスタブ,およびスケルトンをサポートするには,ユーザ定義型のHolderクラスもorg.omg.CORBA.portable.Streamableインタフェースをインプリメントします。
基本型のHolderクラスは,次のコードサンプルで定義されます。これらはorg.omg.CORBAパッケージにあります。
- コードサンプル2-2 Holderクラス
//Java package org.omg.CORBA; final public class ShortHolder implements Streamable { public short value; public ShortHolder( ){} public ShortHolder(short initial){ value =initial; } ...//implementation of the streamable interface } final public class IntHolder implements Streamable { public int value; public IntHolder( ){} public IntHolder(int initial){ value =initial; } ...//implementation of the streamable interface } final public class LongHolder implements Streamable { public long value; public LongHolder( ){} public LongHolder(long initial){ value =initial; } ...//implementation of the streamable interface } final public class ByteHolder implements Streamable { public byte value; public ByteHolder( ){} public ByteHolder(byte initial){ value =initial; } ...//implementation of the streamable interface } final public class FloatHolder implements Streamable { public float value; public FloatHolder( ){} public FloatHolder(float initial){ value =initial; } ...//implementation of the streamable interface } final public class DoubleHolder implements Streamable { public double value; public DoubleHolder( ){} public DoubleHolder(double initial){ value =initial; } ...//implementation of the streamable interface } final public class CharHolder implements Streamable { public char value; public CharHolder( ){} public CharHolder(char initial){ value =initial; } ...//implementation of the streamable interface } final public class BooleanHolder implements Streamable { public boolean value; public BooleanHolder( ){} public BooleanHolder(boolean initial){ value =initial; } ...//implementation of the streamable interface } final public class StringHolder implements Streamable { public java.lang.String value; public StringHolder( ){} public StringHolder(java.lang.String initial){ value =initial; } ...//implementation of the streamable interface } final public class ObjectHolder implements Streamable { public org.omg.CORBA.Object value; public ObjectHolder( ){} public ObjectHolder(org.omg.CORBA.Object initial){ value =initial; } ...//implementation of the streamable interface } final public class ValueBaseHolder implements Streamable { public java.io.Serializable value; public ValueBaseHolder( ){} public ValueBaseHolder(java.io.Serializable initial){ value =initial; } ...//implementation of the streamable interface } final public class AnyHolder implements Streamable { public Any value; public AnyHolder( ){} public AnyHolder(Any initial){ value =initial; } ...//implementation of the streamable interface } final public class TypeCodeHolder implements Streamable { public TypeCode value; public typeCodeHolder( ){} public TypeCodeHolder(TypeCode initial){ value =initial; } ...//implementation of the streamable interface } final public class PrincipalHolder implements Streamable { public Principal value; public PrincipalHolder( ){} public PrincipalHolder(Principal initial){ value =initial; } ...//implementation of the streamable interface }
ユーザ定義型<foo>のHolderクラスを次に示します。
- コードサンプル2-3 ユーザ定義型のHolderクラス
// Java final public class <foo>Holder implements org.omg.CORBA.portable.Streamable { public <foo> value; public <foo>Holder( ) {} public <foo>Holder(<foo> initial) {} public void _read(org.omg.CORBA.portable.InputStream i) {...} public void _write(org.omg.CORBA.portable.OutputStream o) {...} public org.omg.CORBA.TypeCode _type( ) {...} }
- Java null
-
Java nullは,nullCORBAオブジェクトリファレンスとvaluetype(再帰型のvaluetypeを含む)を表すためだけに使用されます。例えば,空の文字列を表すときは,nullを使わないで長さ0の文字列を使用してください。これは配列にも,valuetypeを除く構造型にも当てはまります。構造体用にnullを渡そうとすると,NullPointerExceptionが発生します。