java enumのよく使うヤツ

どうも、竹石です。

みなさんEnum使ってますか?

僕は良く使います。

ちょっとした固定値のグループが必要になったらプロパティファイルにもつとか、

マスタテーブルにもつとか一瞬だけ考えた後に即enumを使います。

でも、使う割にすぐ忘れてしまうのでここで紹介しておきたいと思います。

まず、ただのステータスのenum。

public enum XxxCommand {
  /** 登録 */
  REGIST,
  /** 更新 */
  UPDATE,
  /** 解決 */
  RESOLVE;
}

使い方はこんな感じ。

XxxCommand cmd = XxxCommand.REGIST;

switchでenumを使うときはcaseではEnumの名前を書かなくてもいいらしい。
むしろ書いたら怒られる。(static importはしてないです。)

switch(cmd) {
  case REGIST: ~~~ break;
  case UPDATE: ~~~ break;
  case RESOLVE: ~~~ break;
  default: ~~~
}

ちなみに、enumって日本語も定義できます。

http://yuroyoro.hatenablog.com/entry/20090225/1235550769

次に本題のよく使うコード値とバリューが複数あるようなenum。

コード値から欲しい値を返すメソッドを定義できるのが便利です。

public enum RoutineStatus {

  /** 朝 */
  MORNING(0, "100", "起床")
  /** 昼 */
  , EVENING(2,"101","昼寝")
  /** 晩 */
  , NIGHT(3,"105","入浴");

  private int status;
  private String code;
  private String activity;

  private RoutineStatus(int status, String code, String activity) {
    this.status = status;
    this.code = code;
    this.activity = activity;
  }

  private static final Map codeMap = CollectionsUtil.newHashMap();
  private static final Map activityMap = CollectionsUtil.newHashMap();

  static {
    for (RoutineStatus entry : values()) {
      codeMap.put(entry.getStatus(), entry.getCode());
      activityMap.put(entry.getStatus(), entry.getActivity());
    }
  }

  public int getStatus() {
    return status;
  }

  public String getCode() {
    return code;
  }

  public String getActivity() {
    return activity;
  }

  /**
  * ステータスに対応するコードを返す。
  * 
  * @param status ステータス
  * @return コード
  */
  public static String ofCode(Integer status) {
    return codeMap.get(status);
  }

  /**
  * ステータスに対応する行動を返す。
  * 
  * @param status ステータス
  * @return 行動
  */
  public static String ofActivity(Integer status) {
      return activityMap.get(status);
  }
}

使い方はこんな感じ。

String code = RoutineStatus.ofCode(status);
String activity = RoutineStatus.ofActivity(status);

enumは静的でリッチな感じが好きです。

Let’s enjoy enum life!

コメントを残す

メールアドレスが公開されることはありません。

ABOUTこの記事をかいた人

WEBアプリ開発をメイン業務としている。後輩エンジニアの育成リーダーとしても活躍中。社内勉強会の立ち上げなど、会社の前線でその能力を発揮している。2009年、株式会社ヘッドウォータース新卒入社。