enum

・定数を表現する専門の型
・個々の列挙値は整数でない
・publicコンストラクタを持たない
・値は全てpublic static final
java.util.Comparableを実装
・toString()をoverride
・valueOf()を提供
・final ordinal()を提供
・values()を提供
・class、interfaceと同列に並ぶ

■従来なら
定義:
public class Clazz {
  public static final int CNST1 = 1;
  public static final int CNST2 = 2;
  public Clazz(int cnst) {...}
}

使用:
Clazz hoge = new Clazz(Clazz.CNST1);//正常系
Clazz piyo = new Clazz(12);//異常系→コンパイルエラーにはならない

問題:
コンパイルエラーにならないので、異常系を見落としてしまう。

対策:
public class Clazz {
  public final static int CNST1 = 1;
  public final static int CNST2 = 2;
  public Hoge(int cnst) {
    if (cnst != CNST1 && cnst != CNST2) { エラー処理 }//定数の範囲チェック
  }
}
⇒大変。定数に変更なぞ生じた時にはもう大変大変。

enumなら
定義:
public enum ClazzCnsts {
  CNST1, CNST2
}

使用:
public static void usage1() {
  Clazz hoge = new Clazz(ClazzCnsts.CNST1);
  syso(hoge);
}
public void usage2(ClazzCnsts clazzCnst) {
  for (Clazz c : clazzs) {
    if (c.getCnst == clazzCnst) { syso(c); }
  }
}
public void usage3(ClazzCnsts clazzCnst) {
  switch(clazzCnst) {
    case CNST1:
      //sth
    case CNST2:
      //sth
    default:
      break;
  }
}

結果:
とま、色々と良いらしい。今ひとつ有難みも分からんければ使い方も分からんが。
Tiger出たの何時よ?
なしてこげに使える情報がなかね??

ref:
型に安全な定数を使用するTips
http://www.02.246.ne.jp/~torutk/javahow2/enum.html

tag : enum 列挙型 java

2008-10-31 20:58 : __lang__java : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud