Javaのenumについて
Javaのenum
は、定数の集合を定義するために使用される特別なデータ型です。複数の定数を安全に表現する方法を提供し、コードの可読性や保守性を向上させます。
enumとは?
enum
は、列挙型とも呼ばれる特殊なクラスです。一連の関連する定数を定義する際に使用します。例えば、曜日や月、トランプのスート(スペード、ハートなど)など、変更されない固定的な値を表現するのに最適です。
基本的な構文
以下は、enum
の基本的な構文の例です。
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
このDay
列挙型は、7つの曜日を定義しています。
enumの使用方法
enum
を使用するには、以下のように記述します。
public class EnumExample {
public static void main(String[] args) {
Day today = Day.WEDNESDAY;
System.out.println("Today is: " + today);
switch (today) {
case MONDAY:
System.out.println("Start of the work week!");
break;
case FRIDAY:
System.out.println("End of the work week!");
break;
default:
System.out.println("Midweek days are busy.");
}
}
}
この例では、列挙型を使って曜日を管理しています。switch
文と組み合わせて使うことで、簡潔に条件分岐を記述できます。
enumに定義されているメソッド
Javaのenum
には以下のメソッドが標準で定義されています。
values()
: 列挙型のすべての値を配列として返します。valueOf(String name)
: 指定された名前に対応する列挙型の値を返します。ordinal()
: 列挙型定数の順序(0から始まるインデックス)を返します。
以下はこれらのメソッドの例です。
public class EnumMethodsExample {
public static void main(String[] args) {
// values()メソッド
for (Day day : Day.values()) {
System.out.println(day);
}
// valueOf()メソッド
Day day = Day.valueOf("MONDAY");
System.out.println("Day from valueOf: " + day);
// ordinal()メソッド
System.out.println("Ordinal of MONDAY: " + Day.MONDAY.ordinal());
}
}
フィールドとメソッドを持つenum
enum
は、定数以外にもフィールドやメソッドを持つことができます。例えば、列挙型に説明や数値を関連付けることができます。
public enum Planet {
MERCURY(3.303e+23, 2.4397e6),
VENUS(4.869e+24, 6.0518e6),
EARTH(5.976e+24, 6.37814e6);
private final double mass; // 質量(kg)
private final double radius; // 半径(m)
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
public double getMass() {
return mass;
}
public double getRadius() {
return radius;
}
}
この例では、各惑星に質量と半径を関連付けています。
コレクションでのenumの使用
列挙型は、Set
やMap
などのコレクションで使用することができます。
import java.util.EnumSet;
import java.util.EnumMap;
public class EnumCollectionsExample {
public static void main(String[] args) {
// EnumSetの使用
EnumSet<Day> weekend = EnumSet.of(Day.SATURDAY, Day.SUNDAY);
System.out.println("Weekend days: " + weekend);
// EnumMapの使用
EnumMap<Day, String> dayDescriptions = new EnumMap<>(Day.class);
dayDescriptions.put(Day.MONDAY, "Start of the week");
dayDescriptions.put(Day.FRIDAY, "End of the week");
System.out.println("Descriptions: " + dayDescriptions);
}
}
enumを使用する利点
- 定数の集合を安全かつ簡潔に管理できる。
- 列挙型の値以外を許容しないため、タイプセーフ。
- 値にフィールドやメソッドを関連付けることで、柔軟性が向上。
- コードの可読性と保守性が向上。
まとめ
Javaのenum
は、定数の集合を安全かつ効率的に管理するための強力な機能です。基本的な使い方から、フィールドやメソッドを追加した高度な利用まで、幅広い用途で活用できます。例を参考にして、実際のコードに活用してみてください。