Javaにおけるenumの活用
メニューを表示するにはスワイプしてください
次に進むのは、非常に興味深く、そして何よりも特徴的なデータ構造である enum。
enum の作成方法を見てみる。enum の作成は他のデータ構造と大きく異なり、クラスレベルで行う。
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
実用的な応用
Enum は、定数を簡単に参照できるようにするために必要です。定数のリストであるため、次のようにアクセスします。
Main.java
123456789101112131415161718package com.example; public class Main { public static void main(String[] args) { Days today = Days.MONDAY; System.out.println(today); } } enum Days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
ここでは、enum 定数にアクセスして、今日が何曜日かを把握しています。多くの異なる定数を作成する代わりに、enum に定数の配列を格納します。これは便利で非常に実用的です。例えば、以前の課題の一つでは、部門名を enum に格納し、定数をキーとして使用することができました。
例を見てみましょう:
Main.java
12345678910111213141516171819202122232425262728293031323334353637package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingEmployees = new ArrayList<>(); marketingEmployees.add("Michael"); marketingEmployees.add("Alice"); marketingEmployees.add("Jimmy"); List<String> developerEmployees = new ArrayList<>(); developerEmployees.add("Bob"); developerEmployees.add("John"); developerEmployees.add("Ryan"); List<String> analyticsEmployees = new ArrayList<>(); analyticsEmployees.add("Alexander"); analyticsEmployees.add("Ben"); Map<Departments, List<String>> company = new HashMap<>(); company.put(Departments.MARKETING, marketingEmployees); company.put(Departments.DEVELOPMENT, developerEmployees); company.put(Departments.ANALYTICS, analyticsEmployees); System.out.println("Company: " + company); } } enum Departments { MARKETING, DEVELOPMENT, ANALYTICS }
配列への変換
ちなみに、values() メソッドを使うことで、enum のすべての定数値を配列として取得することも可能。
例を見てみましょう:
Main.java
12345678910111213package com.example; public class Main { public static void main(String[] args) { Days[] array = Days.values(); Days monday = array[1]; System.out.println(monday); } } enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Enumでのフィールドとメソッドの宣言
enum内でフィールドとメソッドの宣言が可能。
交通信号の例を考察:
Main.java
12345678910111213enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
enum内のメソッドはやや異なる動作をする。定数であるため、変更不可。そのため、このenumのコンストラクタでフィールドを追加し、getAction()メソッドを定義して特定の信号に対するアクションを即座に出力する。ご覧の通り、定数を列挙する際に直接enum内でアクションを指定。
このようなメソッド呼び出し例:
Main.java
1234567891011121314151617181920212223package com.example; public class Main { public static void main(String[] args) { TrafficLight currentLight = TrafficLight.RED; String currentAction = currentLight.getAction(); System.out.println("Action: " + currentAction); } } enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
ご覧のとおり、getAction() メソッドを利用することで、特定の信号機の動作をすぐに取得できます。RED を他の色に変更して、どのような結果になるか確認できます。
列挙型のメソッドやフィールドは頻繁には使用されませんが、この機能は存在しているため、知っておくと良いでしょう。列挙型についてさらに詳しく知りたい場合は、 公式Javaドキュメント をご参照ください。
JavaにおけるEnumの利点
- 可読性の向上:数値定数や文字列リテラルを名前付き値に置き換えることで、コードの可読性が向上;
- 型安全性:コンパイラが列挙型の型安全性を保証し、型に関するエラーを防止;
- 値の限定:列挙型は固定された値の集合を提供し、コードの予測性が向上;
- メソッドやフィールドの追加が可能:列挙型にはメソッドやフィールドを含めることができ、単純な列挙よりも高機能。
1. Javaにおけるenumとは何ですか?
2. 1年の月を表すMonthsというenumをどのように宣言しますか?
3. Colorsというenumのすべての値の配列を取得するにはどうしますか?
4. 次の列挙型に関する記述のうち、正しいものはどれですか?
5. 次の列挙型を考慮して、currentStatus を Status.ACTIVE と正しく比較する方法はどれですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください