Java Enum(列挙型)
1. Java Enum の基礎
Enum(列挙型)は、定数(final 変数のような変更不可能な変数)のグループを表す特別な「クラス」です。
Enumを作成するには、class や interface の代わりに 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);
}
}出力結果:
MEDIUM3. 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
HIGH5. Enum とクラスの違い
Enumはクラスと同様に、属性(フィールド)やメソッドを持つことができます。唯一の違いは、Enumの定数がデフォルトで public、static、かつ final(変更不可能・上書き不可)である点です。
また、Enumには以下の制限があります:
- インスタンス化(new によるオブジェクト作成)ができない。
- 他のクラスを継承(extends)することができない(ただし、インターフェースの実装は可能)。
6. なぜ、いつ Enum を使うのか?
月の日数、曜日、色、トランプのカードなど、変更されることがない既知の値のセットを扱う場合にEnumを使用してください。
Enumを利用することで、マジックナンバーや不適切な文字列定数を排除し、プログラムの型安全性(Type Safety)を飛躍的に高めることができます。