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

« Invalid byte 1 of 1-byte UTF-8 sequence|Top|年末調整 »

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://8318.blog100.fc2.com/tb.php/442-a3078bf5

Top

HOME

06 | 2009/07 | 08
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

クリックで救える命がある。
*

*

QR

name:
mail:
title:
body: