logo

Javaの列挙型

Java では、列挙 (enum) は、名前付き定数のグループを定義するために使用される特別な型です。

  • 列挙型は、整数値に意味のある名前を割り当てることで、プログラムの可読性の保守性と型の安全性に役立ちます。
  • 主に、道順の曜日など、アイテムに使用できる値のセットが少ない場合に役立ちます。

列挙型の作成

構文:



enum 列挙名 {

定数1 定数2 定数3;

}



Java
enum TrafficLight {  RED GREEN YELLOW; } public class Test{    public static void main(String[] args){    TrafficLight x = TrafficLight.RED;  System.out.println(x);  } } 

出力
RED 

Javaでのenumの宣言

Enum 宣言はクラスの外でもクラス内でも実行できますが、メソッド内では実行できません。

1. 授業外での宣言

上記の例で見たように、列挙型はクラスの外で宣言して直接アクセスできます。

2. クラス内での宣言

列挙型はクラス内で宣言することもできますが、メソッド内では宣言できません。



Java
public class Test {  enum Color {  RED  GREEN  BLUE;  }  // Driver method  public static void main(String[] args) {  Color c1 = Color.RED;  System.out.println(c1);  } } 

出力
RED 

JavaのEnumのプロパティ

以下に示すように、特定のプロパティの後に Enum が続きます。

  • クラスタイプ: 内部的にはクラスとして実装されます。
  • 列挙定数: 各定数は列挙型のオブジェクトです。
  • スイッチのサポート: switch ステートメントで使用できます。
  • 暗黙的な修飾子: 定数は public staticfinal です。
  • 継承: Enum はクラスを拡張できませんが、インターフェイスを実装できます。

Switch ステートメントの列挙型

enum を switch ステートメントで使用すると、enum 定数に基づいてさまざまなケースを処理できます。

Java
import java.io.*; class GFG{    // Enum Declared  enum Color {  RED  GREEN  BLUE  YELLOW;  }  public static void main(String[] args){    Color var_1 = Color.YELLOW;  // Switch case with Enum  switch (var_1) {  case RED:  System.out.println('Red color');  break;  case GREEN:  System.out.println('Green color');  break;  case BLUE:  System.out.println('Blue color');  break;  default:  System.out.println('Other color');  }  } } 

出力
Other color 

メソッドとコンストラクターを含む列挙型

列挙型には、定数ごとに個別に実行されるコンストラクターとメソッドを含めることができます

Java
enum Color{  RED GREEN BLUE;  private Color(){    System.out.println('Constructor called for: ' + this);  }  public void display(){    System.out.println('Color is: ' + this);  } } public class Test{    public static void main(String[] args){    Color c1 = Color.RED;  c1.display();  } } 

出力
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED 

抽象メソッドを含む列挙型

Enum では、各定数が実装する必要がある抽象メソッドを宣言できます。

Java
enum Day{    MONDAY{    public String getNumber(){  return '1st day';     }  }  FRIDAY{    public String getNumber(){  return '5th day';     }  };    public abstract String getNumber(); } public class EnumTest {  public static void main(String[] args){    System.out.println(Day.MONDAY.getNumber());   System.out.println(Day.FRIDAY.getNumber());  } } 

出力
1st day 5th day 

value() を使用した列挙型の反復

EnumType.values() を使用して、すべての enum 定数をループします。

Java
enum Color{  RED GREEN BLUE;   } public class Test{    public static void main(String[] args){    for (Color c : Color.values()){    System.out.println(c);  }  } } 

出力
RED GREEN BLUE 

Enum と EnumSet (特定の範囲の反復)

EnumSet.range() を使用すると、特定の範囲の enum 定数に対する反復が可能になります。

Java
import java.util.EnumSet; public class EnumSetExample{    enum Day{    SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY;     }  public static void main(String[] args){    EnumSet<Day> workDays = EnumSet.range(Day.TUESDAY Day.FRIDAY);  for (Day d : workDays){    System.out.println(d);  }  } } 

出力
TUESDAY WEDNESDAY THURSDAY FRIDAY 

Enum メンバーを使用したクラスの作成

列挙型と通常のクラスを組み合わせて、プログラム ロジックを編成できます。 enum はクラス内のメンバー変数にすることができ、メソッドは enum 値に基づいてアクションを実行できます。

Java
/*package whatever //do not write package name here */ import java.io.*; enum Day {  MONDAY  TUESDAY  WEDNESDAY  THURSDAY  FRIDAY  SATURDAY  SUNDAY } public class EnumTest {  // Enum member variable  Day day;  // constructor which takes enum value  public EnumTest(Day day) { this.day = day; }  // method to execute action as per enum value  public void tellItLikeItIs()  {  switch (day) {  case MONDAY:  System.out.println('Mondays are tough');  break;  case TUESDAY:  System.out.println('Tuesday are better');  break;  case WEDNESDAY:  System.out.println('Wednesday are okay');  break;  case THURSDAY:  System.out.println('Thursdays are hopeful');  break;  case FRIDAY:  System.out.println('Fridays are exciting');  break;  case SATURDAY:  System.out.println('Saturdays are relaxing');  break;  case SUNDAY:  System.out.println('Sunday are for rest');  break;  default:  System.out.println('Everyday are good');  break;  }  }  public static void main(String[] args)  {  EnumTest firstDay = new EnumTest(Day.MONDAY);  firstDay.tellItLikeItIs();  EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);  thirdDay.tellItLikeItIs();  EnumTest fifthDay = new EnumTest(Day.FRIDAY);  fifthDay.tellItLikeItIs();  EnumTest sixthDay = new EnumTest(Day.SATURDAY);  sixthDay.tellItLikeItIs();  EnumTest seventhDay = new EnumTest(Day.SUNDAY);  seventhDay.tellItLikeItIs();  } } 

出力
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest 

説明:

  • 上記のコードの EnumTest クラスは、Day 型のメンバーで作成されます。 Day enum を引数として受け取り、それを割り当てるコンストラクターがあります。
  • このクラスには、日の値に基づいてメッセージを出力するメソッド TellItLikeItIs() があります。
  • メイン メソッドには、さまざまな Day enum 値を使用し、それぞれに対して TellItLikeItIs() メソッドを呼び出す EnumTest のオブジェクトが含まれています。

注記: EnumTest は enum ではなく通常のクラスであるため、 new キーワードが使用されます。そのため、インスタンスを作成し、enum 値をそのコンストラクターに渡します。