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 値をそのコンストラクターに渡します。