Java 速習チュートリアル

Java Enum(列挙型)

1. Java Enum の基礎

Enum(列挙型)は、定数final 変数のような変更不可能な変数)のグループを表す特別な「クラス」です。

Enumを作成するには、classinterface の代わりに enum キーワードを使用し、定数をカンマで区切ります。慣習として、定数はすべて大文字で記述します。

例:

enum Level {
  LOW,
  MEDIUM,
  HIGH
}

Enumの定数には、ドット(.構文を使ってアクセスします。

Level myVar = Level.MEDIUM;

       補足: Enumは「enumerations(エニュメレーション)」の略で、「列挙されたもの(一つひとつ挙げられたリスト)」を意味します。

2. クラス内の Enum

Enumはクラスの内部に定義することも可能です。

例:

public class Main {
  enum Level {
    LOW,
    MEDIUM,
    HIGH
  }

  public static void main(String[] args) {
    Level myVar = Level.MEDIUM; 
    System.out.println(myVar);
  }
}

出力結果:

MEDIUM

3. Switch文での Enum 活用

Enumは、Switch文で対応する値をチェックする際に非常によく使われます。

例:

enum Level {
  LOW,
  MEDIUM,
  HIGH
}

public class Main {
  public static void main(String[] args) {
    Level myVar = Level.MEDIUM;

    switch(myVar) {
      case LOW:
        System.out.println("低レベル");
        break;
      case MEDIUM:
         System.out.println("中レベル");
        break;
      case HIGH:
        System.out.println("高レベル");
        break;
    }
  }
}

出力結果:

中レベル

4. Enum のループ処理

Enum型には values() というメソッドが用意されており、これはすべての定数を含む配列を返します。このメソッドは、Enumの全要素をループ処理したい場合に便利です。

例:

for (Level myVar : Level.values()) {
  System.out.println(myVar);
}

出力結果:

LOW
MEDIUM
HIGH

5. Enum とクラスの違い

Enumはクラスと同様に、属性(フィールド)やメソッドを持つことができます。唯一の違いは、Enumの定数がデフォルトで publicstatic、かつ final(変更不可能・上書き不可)である点です。

また、Enumには以下の制限があります:

  • インスタンス化(new によるオブジェクト作成)ができない。
  • 他のクラスを継承(extends)することができない(ただし、インターフェースの実装は可能)。

6. なぜ、いつ Enum を使うのか?

月の日数、曜日、色、トランプのカードなど、変更されることがない既知の値のセットを扱う場合にEnumを使用してください。

Enumを利用することで、マジックナンバーや不適切な文字列定数を排除し、プログラムの型安全性(Type Safety)を飛躍的に高めることができます。