のみほーだい!

のみほーだい!TOP
のみほーだい! は、(株)トラストサービス ITソリューション事業部  が運営する、技術情報交流サイトです。

J2SE 5.0 codeName Tiger

2006/07/25
@author k.mori

■■ コードを簡潔に書くための新文法 Enum  ■■

enum 型は、あるカテゴリーに属した複数の定数をひとまとまり として取り扱うための仕組みです。J2SE 5.0 の enum は、  C や C++ の enum ように内部的に整数で定数を保持するものではなく、  タイプセーフ enum と呼ばれるパターンを実現したものになっています。

①関連する定数、例えば月や曜日といった定数を宣言する場合、 以下のようにstatic final intを使用して記述することがあります。

  static final int
   JANUARY=1, FEBRUARY=2, MARCH=3, APRIL=4,
   MAY=5, JUNE=6, JULY=7, AUGUST=8,SEPTEMBER=9,
   OCTOBER=10, NOVEMBER=11, DECEMBER=12;

②JDK5.0 enumキーワードを使用すると簡潔に宣言することができます。  以下は月を表す列挙型を宣言する例です。

  enum Month {
    JANUARY, FEBRUARY, MARCH, APRIL,
    MAY, JUNE, JULY, AUGUST,SEPTEMBER,
    OCTOBER, NOVEMBER, DECEMBER
   }

②-1 
enum Monthには、JANUARYからDECEMBERまでの12個の要素があります。 ここでは要素名を英大文字で記述しましたが、一般の識別子と同様に、 英小文字、数字、記号などを使用することもできます。


②-2 使用方法

1: public class EnumSample {
2:
3: // 列挙型を使用して月の名前を宣言する
4:  enum Month {
5:    JANUARY, FEBRUARY, MARCH, APRIL,
6:    MAY, JUNE, JULY, AUGUST, SEPTEMBER,
7:    OCTOBER, NOVEMBER, DECEMBER
8:   }
9:
10: // 列挙型の変数を宣言して使用する
11:  public static void main(String[] args) {
12:    Month m=Month.JANUARY;
13:    System.out.println(m); // ← JANUARYと表示する
14:    System.out.println(Month.FEBRUARY); //←FEBRUARYと表示する
15:   }
16: }

③ valuesメソッドの使い方

  valuesメソッドを使用すると、列挙型の全要素を取得することができます。
  EnumSample2.javaは、valuesメソッドと拡張forループを組み合わせて、
  列挙型Monthの全要素を表示する例です。実行結果は以下のようになります。

  JANUARY
  FEBRUARY
  MARCH
  APRIL
  MAY
  JUNE
  JULY
  AUGUST
  SEPTEMBER
  OCTOBER
  NOVEMBER
  DECEMBER

1: public class EnumSample2 {
2:
3: // 列挙型を使用して月の名前を宣言する
4:  enum Month {
5:     JANUARY, FEBRUARY, MARCH, APRIL,
6:     MAY, JUNE, JULY, AUGUST,
7:     SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
8:    }
9:
10: // 拡張forループとvaluesメソッドを使用して
11: // 列挙型の全要素を表示する
12:   public static void main(String[] args) {
13:     for (Month m : Month.values()) {
14:       System.out.println(m);
15:     }
16:    }
17: }
④その他に【equalsメソッド】【compareToメソッド】【ordinalメソッド】があります。