文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

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; ()V Code
(Ljava/lang/String;I)V
"
$ 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;@1 @ @ @ @ @


赤文字をつけた2つのメソッドは自動的に追加されたもの。

・static 列挙型[ ] values()
   列挙した値(定数)のすべてを配列で返す

・static 列挙型 valueOf ( String name)
  引数で指定された名前を持つ値(定数)を返す



列挙型でのコンストラクタ、変数、メソッド定義

f:id:ron623:20150314091404p:plain

int型を引数にとるコンストラクタがないよー!って言ってる。。


以下のようにコンストラクタを作成する。

package enumTest;

// あらしめん列挙クラス
public enum EnumTest {

AIBA(1), SAKURAI(5), MATSUMOTO(3), NINOMIYA(2), OHNO(4);

private EnumTest(int a) {

}

}

EnumはComparableインターフェースを実装しており、各定数は配列した順番で管理されている。