トップJava > enumの使い方

enumの使い方

enum型の定義

enum型の定義方法は C言語と同じで次のように記述する。 Java の場合、列挙定数は一般的には大文字(MON, TUE, ...)使われるが[3]、小文字であっても問題はない。

enum Week { Mon,  Tue,  Wed,  Thu, Fri, Sat,  Sun };

上記の場合、Mon、Tue、...、Sun には順に 0, 1, ... , 6 が割り当てられる。

C言語の場合、

enum Week { Mon=1,  Tue,  Wed,  Thu, Fri, Sat=11,  Sun };
とすれば、Mon=1、Tue=2、...、Fri=5、 Sat=11、 Sun=12 となるが[4]、 Java の場合、そのような仕様にはなっていない。

次のように、フィールドを使えば、似たことができる[3]。

  public enum Week {
      Mon(1), Tue(2), Wed(3), Thu(4), Fri(5), Sat(11), Sun(12);

      private int id; // フィールドの定義

      private Fruit(int id) { // コンストラクタの定義
         this.id = id;
      }
  }

主な使い方

序数(0, 1, 2, ... は ordinalメソッド、名称 "Mon", "Tue", ... は nameメソッドで得られる。

 switch (week) {
    case Mon: 
        System.out.printf("%d: %s\n", week.ordinal(), week.name());
        break;           // 0: Mon
    // 中略
    case Sun: 
        System.out.printf("%d: %s\n", week.ordinal(), week.name());
        break;           // 6: Sun
 }  // week は Mon~Sun までの値しか取り得ないので default文はいらない

文字列から enum型を得るには次のようにする。

   Week w = Week.valueOf("Tue");    // w は Week.Tue となる

列挙子が多い場合、ハッシュ表を使うのであろうか? パフォーマンスがちょっと気になる。いずれ確認する。

リファレンス

[1] クラスEnum<E extends Enum<E>>
[2] 入門Javaのenum
[3] Java入門enum(列挙型)を徹底解説!使いどころも紹介
[4] 【C言語入門】列挙型(enum)の使い方