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
・個々の列挙値は整数でない
・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
