Hitachi

VisiBroker Version 5 Borland(R) Enterprise Server VisiBroker(R) プログラマーズリファレンス


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) {...}
}