Java enumの使い方

使い方

enum(列挙型)は、定数の有限集合を定義する。

package com.segakuin.example;

public class Sample {
  enum Season {SPRING, SUMMER, AUTUMN, WINTER};

  public static void main(String[] args) {
    Season season = Season.SUMMER;
    System.out.println(season);
  }
}

java.lang.Enum

enum型の基底クラスはjava.lang.Enumである。したがってEnumクラスのメソッドを呼び出すことができる。

Enumクラスには次に示すstaticメソッドがある。

Enumクラスのstaticメソッド
メソッド 説明
valueOf() 文字列から定数インスタンスを取得する。
values() 宣言された定数すべてを含む配列(順序は記述順)を返す。

Enumクラスには次に示すinstanceメソッドがある。

enumメソッド
メソッド 説明
ordinal() 列挙型の序数を返す。
toString() 列挙型の名前を返す。

ordinal()

列挙型の序数を返す。序数は0から始まる整数である。

public final int ordinal()
enum Season {
  SPRING,
  SUMMER, 
  AUTUMN,
  WINTER
}

public class Example {
  public static void main(String[] args) {
    System.out.println(Season.SUMMER.ordinal());
  }
}

toString()

列挙型の名前を返す。

public String toString()
enum Season {
  SPRING,
  SUMMER, 
  AUTUMN,
  WINTER
}

public class Example {
  public static void main(String[] args) {
    System.out.println(Season.SUMMER.toString());
  }
}

valueOf()

名前を指定して列挙型(enum)の値を取得するには、java.lang.Enum クラスの valueOf() メソッドを使う。

enum Season {
  SPRING,
  SUMMER, 
  AUTUMN,
  WINTER
}

public class Example {
  public static void main(String[] args) {
    String name = "SUMMER";
    try {
      Season season = Season.valueOf(name);
    } catch (NullPointerException e) {
      e.printStackTrace();
    } catch (IllegalArgumentException e) {
      e.printStackTrace();
    }
  }
}

values()

enumのvaluesメソッドは、宣言された定数すべてを含む配列(順序は記述順)を返す。

public class Sample {
  enum Season {SPRING, SUMMER, AUTUMN, WINTER};
  public static void main(String[] args) {
    for (Season season : Season.values()) {
      System.out.println(season.ordinal() + ":" + season);
    }
  }
}

上記プログラムの実行結果を示す。

0:SPRING
1:SUMMER
2:AUTUMN
3:WINTER
public class Sample {
  enum Season {
    SPRING ("春"),
    SUMMER ("夏"),
    AUTUMN ("秋"),
    WINTER ("冬");
    private String name;
    Season(String name) {
      this.name = name;
    }
    public String toString() {
      return name;
    }
  };
  public static void main(String[] args) {
    for (Season season : Season.values()) {
      System.out.println(season.name() + ":" + season.toString());
    }
  }
}

上記プログラムの実行結果を示す。

SPRING:春
SUMMER:夏
AUTUMN:秋
WINTER:冬

instanceof

列挙型かどうかはinstanceof演算子で判定することができる。

if (Season.SPRING instanceof Season) {
  System.out.println("Season.SPRING is a instance of Season.");
}

参考文献

Oracle 2021. Enum Types. The Java™ Tutorials