2.8.1 enum
IDL enumは,value( )メソッド,ラベルごとの二つの静的データメンバ,整数変換メソッド,およびプライベートコンストラクタを宣言する,enum型と同名のJavaファイナルクラスにマッピングされます。JavaファイナルクラスにマッピングされるIDL enumの例を次に示します。
- コードサンプル2-9 JavaファイナルクラスにマッピングされるIDL enum
// Generated java public final class <enum_name> { //one pair for each label in the enum public static final int _<label> = <value>; public static final <enum_name> <label> = new <enum_name>(_<label>); public int value( ) {...} //get enum with specified value public static <enum_name> from_int(int value); //constructor protected <enum_name>(int) {...} }
メンバの一つは,IDL enumラベルと同名のpublic static finalです。そのほかのメンバは,先頭にアンダースコア(_)を付けられ,switch文で使用されます。
value( )メソッドは整数値を返します。値は,0から順に割り当てられます。enumにvalueと名づけられたラベルがある場合,Javaのvalue ( )メソッドとの衝突はありません。
enumのインスタンスは一つだけです。一つのインスタンスしかないので,ポインタ等価テストが正しく動作します。つまり,デフォルトjava.lang.Objectインプリメンテーションのequals( ),およびhash( )が,自動的にenumのシングルトンオブジェクトで正しく動作します。
enumのJavaクラスには追加メソッドfrom_int( )があり,これはenumを指定された値で返します。
enumのHolderクラスも生成されます。その名前は,次のようにenumのマッピングされたJavaクラス名の後ろにHolderを付けたものです。
- コードサンプル2-10 enumのHolderクラス
public class <enum_name>Holder implements org.omg.CORBA.portable.Streamable { public <enum_name> value; public <enum_name>Holder( ) {} public <enum_name>Holder(<enum_name> 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( ) {...} }
- コードサンプル2-11 enumのJavaにマッピングされたIDL
//IDL module Example { enum EnumType {first,second,third }; }; //generated Java public final class EnumType implements org.omg.CORBA.portable.IDLEntity { public static final int _first =0; public static final int _second =1; public static final int _third =2; public static final EnumType first = new EnumType(_first); public static final EnumType second = new EnumType(_second); public static final EnumType third = new EnumType(_third); protected EnumType(final int _vis_value){...} public int value( ){...} public static EnumType from_int (final int _vis_value) {...} public java.lang.String toString( ){...} } public final class EnumTypeHolder implements org.omg.CORBA.portable.Streamable { public OtherExample.EnumType value; public EnumTypeHolder( ){...} public EnumTypeHolder( final OtherExample.EnumType _vis_value){...} public void _read( final org.omg.CORBA.portable.InputStream input) {...} public void _write( final org.omg.CORBA.portable.OutputStream output) {...} public org.omg.CORBA.TypeCode _type( ){...} public boolean equals(java.lang.Object o) {...} }