Java

[Java] enumをswitch文で分岐させる

はじめに

enum型の変数をswitch文で分岐させたい時にハマったのでメモ。

やろうとしたこと

こんな感じのenumがあって渡されたenum型の値をswitch文で分岐させようとした。

HogeType.java
public enum HogeType {
  NONE(0),
  FIRST(1),
  SECOND(2)
}

ダメな例

public void hoge(HogeType hogeType){
  switch(hogeType){
    case HogeType.FIRST:
      System.out.println("first");
      break;
    case HogeType.SECOND:
      System.out.println("second");
      break;
    default:
      System.out.println("none");
  }
}

この中のcase HogeType.FIRST:の部分でエラーが出ていました。内容はan enum switch case label must be the unqualified name of an enumeration constantというものです。

正解

public void hoge(HogeType hogeType){
  switch(hogeType){
    case FIRST:
      System.out.println("first");
      break;
    case SECOND:
      System.out.println("second");
      break;
    default:
      System.out.println("none");
  }
}

調べたところenum型をswitch文の引数にとる場合は、caseに与える値を定数にしなければならないらしいです。つまりHogeType.という記述がいらなくなります。