Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ Javaにおけるenumの活用 | 高度なJava機能とテクニック
Javaデータ構造

bookJavaにおけるenumの活用

メニューを表示するにはスワイプしてください

次に進むのは、非常に興味深く、そして何よりも特徴的なデータ構造である enum

enum の作成方法を見てみる。enum の作成は他のデータ構造と大きく異なりクラスレベルで行う。

DaysOfTheWeek.java

DaysOfTheWeek.java

copy
123456789
public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }

実用的な応用

Enum は、定数を簡単に参照できるようにするために必要です。定数のリストであるため、次のようにアクセスします。

Main.java

Main.java

copy
123456789101112131415161718
package 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

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637
package 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

Main.java

copy
12345678910111213
package 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

Main.java

copy
12345678910111213
enum 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

Main.java

copy
1234567891011121314151617181920212223
package 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. 可読性の向上:数値定数や文字列リテラルを名前付き値に置き換えることで、コードの可読性が向上;
  2. 型安全性:コンパイラが列挙型の型安全性を保証し、型に関するエラーを防止;
  3. 値の限定:列挙型は固定された値の集合を提供し、コードの予測性が向上;
  4. メソッドやフィールドの追加が可能:列挙型にはメソッドやフィールドを含めることができ、単純な列挙よりも高機能。

1. Javaにおけるenumとは何ですか?

2. 1年の月を表すMonthsというenumをどのように宣言しますか?

3. Colorsというenumのすべての値の配列を取得するにはどうしますか?

4. 次の列挙型に関する記述のうち、正しいものはどれですか?

5. 次の列挙型を考慮して、currentStatusStatus.ACTIVE と正しく比較する方法はどれですか?

question mark

Javaにおけるenumとは何ですか?

正しい答えを選んでください

question mark

1年の月を表すMonthsというenumをどのように宣言しますか?

正しい答えを選んでください

question mark

Colorsというenumのすべての値の配列を取得するにはどうしますか?

正しい答えを選んでください

question mark

次の列挙型に関する記述のうち、正しいものはどれですか?

正しい答えを選んでください

question mark

次の列挙型を考慮して、currentStatusStatus.ACTIVE と正しく比較する方法はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  1

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 4.  1
some-alt