enumの基礎
enumについて
特定の値のみをもつ型で、プログラマが任意に定義できる。
列挙型は、java.lang.Enumクラスを継承したfinalクラスとなる。
列挙した値はpublic static finalで定数化される。そのため、列挙する値の前後にダブルクォーテーションはつかない。
package enumTest;
// あらしめん列挙クラス
public enum EnumTest {
AIBA,
SAKURAI,
MATSUMOTO,
NINOMIYA,
OHNO
}
上記をコンパイルしてできたEnumTestクラス(ちょっと文字化けしてるけど・・・)
ハコセ 4 : enumTest/EnumTest java/lang/Enum AIBA LenumTest/EnumTest; SAKURAI MATSUMOTO NINOMIYA OHNO ENUM$VALUES [LenumTest/EnumTest;
"
$ LineNumberTable LocalVariableTable
this values ()[LenumTest/EnumTest;
, . - java/lang/System / 0 arraycopy *(Ljava/lang/Object;ILjava/lang/Object;II)V valueOf '(Ljava/lang/String;)LenumTest/EnumTest;
4 1 5 5(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
SourceFile
EnumTest.java Signature %Ljava/lang/Enum
赤文字をつけた2つのメソッドは自動的に追加されたもの。
・static 列挙型[ ] values()
列挙した値(定数)のすべてを配列で返す
・static 列挙型 valueOf ( String name)
引数で指定された名前を持つ値(定数)を返す
int型を引数にとるコンストラクタがないよー!って言ってる。。
以下のようにコンストラクタを作成する。
package enumTest;
// あらしめん列挙クラス
public enum EnumTest {
AIBA(1), SAKURAI(5), MATSUMOTO(3), NINOMIYA(2), OHNO(4);
private EnumTest(int a) {
}
}
EnumはComparableインターフェースを実装しており、各定数は配列した順番で管理されている。