[Java] Enum(列挙型)についてまとめ
Enum(列挙型)について
概要
Enumは同じカテゴリの定数をまとめて管理するためのもので、クラスのように扱うことができます。
なお、JVM上はクラスとして扱われるため、メソッドやコンストラクタを定義することもできます。
構文
アクセス修飾子 enum 列挙名 { 列挙子, 列挙子, 列挙子... }
Enumの基本的な使い方
定義例
public enum Status {
DISABLED,
APPROVED,
ENABLED
}
Enumを使った分岐処理
Status status = Status.APPROVED;
switch (status) {
case DISABLED:
System.out.println("無効");
break;
case APPROVED:
System.out.println("承認");
break;
case ENABLED:
System.out.println("有効");
break;
}
配列で列挙子をすべて取得する
Status[] statuses = Status.values();
列挙子を文字列で取得する
Status status = Status.valueOf("APPROVED");
存在しない列挙子を指定すると IllegalArgumentException が発生します。
列挙子に値を持たせる
構文
アクセス修飾子 enum 列挙名
{
列挙子(値),
列挙子(値),
列挙子(値)...
private 型 フィールド;
private コンストラクタ {}
}
定義例
enum Status {
DISABLED("無効"),
APPROVED("承認"),
ENABLED("有効");
private String value;
Status(String value) {
this.value = value;
}
@Override
public String toString() {
return value;
}
}
- 列挙子の値を格納するためのフィールドと、初期化するためのコンストラクタが必須になる。
- コンストラクタをpublicにするとコンパイルエラーになる。これはEnumのインスタンスを生成するのはJVMのみが行うため。
コンストラクタについて
JVM上ではクラスとして扱われるため、使用する際に列挙子ごとにインスタンスが生成されます。
以下のコードは、Enumのコンストラクタにログを出力して、コンストラクタコール回数を確認します。
enum Status {
DISABLED("無効"),
APPROVED("承認"),
ENABLED("有効");
private String value;
Status(String value) {
System.out.println(value); // ★検証
this.value = value;
}
@Override
public String toString() {
return value;
}
}
public class EnumTest {
public static void main(String[] args) {
Status status = Status.APPROVED;
}
}
このコードを実行すると、以下のようにコンストラクタが3回実行されているのが分かります。
java EnumTest.java 無効 承認 有効
コメント
コメントを投稿