一文でJAVAの列挙(enum)が分かります。


Javaエニュメレーションは特殊な種類で、一般的には一年の4つの季節、一年の12ヶ月、一週間の7日間、方向は東南西北などがあります。
Javaエニュメレーション類はenumキーワードで定義され、各定数はカンマを使って分割されます。
例えば、色を定義するエニュメレート・クラス。

enum Color 
{ 
  RED, GREEN, BLUE; 
} 
以上のエニュメレート・クラスのColorの色定数は、RED、GREEN、BLUEであり、それぞれ赤、緑、青を表している。
使用例:

enum Color
{
  RED, GREEN, BLUE;
}
 
public class Test
{
  //       
  public static void main(String[] args)
  {
    Color c1 = Color.RED;
    System.out.println(c1);
  }
}
以上のコード出力を実行した結果:
RED
内部クラスに列挙を使う
エニュメレート・クラスは、内部カテゴリにも宣言できます。

public class Test
{
  enum Color
  {
    RED, GREEN, BLUE;
  }
 
  //       
  public static void main(String[] args)
  {
    Color c1 = Color.RED;
    System.out.println(c1);
  }
}
以上のコード出力を実行した結果:
RED
すべての列挙はクラスを通して内部で実現され、すべての列挙値はpublic static finalです。
以上の列挙類Colorを内部クラスに転化して実現した:

class Color
{
   public static final Color RED = new Color();
   public static final Color BLUE = new Color();
   public static final Color GREEN = new Color();
}
エニュメレーション要素
for文を使ってエニュメレート・エレメントを反復できます。

enum Color
{
  RED, GREEN, BLUE;
}
public class MyClass {
 public static void main(String[] args) {
  for (Color myVar : Color.values()) {
   System.out.println(myVar);
  }
 }
}
以上のコード出力を実行した結果:
RED
GREEN
BLUE
switchに列挙類を使う
列挙類はよくswitch文に使われます。

enum Color
{
  RED, GREEN, BLUE;
}
public class MyClass {
 public static void main(String[] args) {
  Color myVar = Color.BLUE;

  switch(myVar) {
   case RED:
    System.out.println("  ");
    break;
   case GREEN:
     System.out.println("  ");
    break;
   case BLUE:
    System.out.println("  ");
    break;
  }
 }
}
以上のコード出力を実行した結果:

values()、ordinal()とvalueOf()の方法
エンム定義のエニュメレーション類は、java.lang.Enum類を引き継ぎ、java.lang.Seriableとjava.lang.com parableの2つのインターフェースを実現しました。
values()、ordinal()とvalueOf()の方法はjava.lang.Enum類にあります。
  • values()は、エニュメレーションクラスのすべての値を返します。
  • ordinal()方法は、配列インデックスのように、各列挙定数のインデックスを見つけることができる。
  • valueOf()メソッドは、指定された文字列値の列挙定数を返します。
  • 
    enum Color
    {
      RED, GREEN, BLUE;
    }
     
    public class Test
    {
      public static void main(String[] args)
      {
        //    values()
        Color arr[] = Color.values();
     
        //     
        for (Color col : arr)
        {
          //     
          System.out.println(col + " at index " + col.ordinal());
        }
     
        //    valueOf()       ,        IllegalArgumentException
        System.out.println(Color.valueOf("RED"));
        // System.out.println(Color.valueOf("WHITE"));
      }
    }
    以上のコード出力を実行した結果:
    RED at index 0
    GREEN at index 1
    BLUE at index 2
    RED
    エニュメレート・メンバー
    エニュメレーションは普通のクラスと同じで自分の変数、方法、コンストラクションを使ってもいいです。コンストラクタはprvateを使って修飾子にしかアクセスできないので、外部からの呼び出しはできません。
    列挙は具体的な方法を含むことができます。抽象的な方法も含まれます。エニュメレート・クラスが抽象的な方法を持っているなら、エニュメレート・クラスの各インスタンスはそれを実現しなければならない。
    
    enum Color
    {
      RED, GREEN, BLUE;
     
      //     
      private Color()
      {
        System.out.println("Constructor called for : " + this.toString());
      }
     
      public void colorInfo()
      {
        System.out.println("Universal Color");
      }
    }
     
    public class Test
    {  
      //   
      public static void main(String[] args)
      {
        Color c1 = Color.RED;
        System.out.println(c1);
        c1.colorInfo();
      }
    }
    以上のコード出力を実行した結果:
    Costructor caled for:RED
    Costructor caled for:GREEN
    Costructor caled for:BLUE
    RED
    Universal Color
    以上はJAVAエニュメレーションの詳しい内容が分かります。JAVAエニュメレーションに関する資料は他の関連記事に注目してください。