IDL enumは,value( )メソッド,ラベルごとの二つの静的データメンバ,整数変換メソッド,およびプライベートコンストラクタを宣言する,enum型と同名のJavaファイナルクラスにマッピングされます。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を付けたものです。
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( ) {...}
}
//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) {...}
}