enumとは、プログラマが選んだ各々の識別子をそのまま有限集合として持つ抽象データ型
enumのメリットは、ソースの可読性が上がり、保守性が良くなる点にあります。
また、emun型のオブジェクトは単一インスタンス(シングルトン)になる。
public class UsecaseDialogStatus {
public static final int SHOW = 1;
public static final int POSITIVE = 2;
public static final int NEGATIVE = 3;
public static final int CLOSE = 4;
public enum DialogStatus {
SHOW(1),
POSITIVE(2),
NEGATIVE(3),
CLOSE(4);
private final int mStatus;
DialogStatus(int status) {
this.mStatus = status;
}
public int getStatus() {
return mStatus;
}
}
public static void main(String[] args){
// enumじゃいない普通の定数
check(SHOW);
check(POSITIVE);
check(8); // 定義していない値も引数に入れることができてしまう。
check(4); // このように直接数値を入れられると保守性が悪くなり困ることがあります。
// enum
check(DialogStatus.SHOW);
check(DialogStatus.POSITIVE);
check(DialogStatus.NEGATIVE);
check(DialogStatus.CLOSE);
}
private static void check(int status) {
switch (status) {
case SHOW:
System.out.println("This is show. status=" + status);
break;
case POSITIVE:
System.out.println("This is positive. status=" + status);
break;
case NEGATIVE:
System.out.println("This is negative. status=" + status);
break;
case CLOSE:
System.out.println("This is close. status=" + status);
break;
}
}
private static void check(DialogStatus status) {
switch (status) {
case SHOW:
System.out.println("This is " + status.name() + ". status=" + status.getStatus());
break;
case POSITIVE:
System.out.println("This is " + status.name() + ". status=" + status.getStatus());
break;
case NEGATIVE:
System.out.println("This is " + status.name() + ". status=" + status.getStatus());
break;
case CLOSE:
System.out.println("This is " + status.name() + ". status=" + status.getStatus());
break;
}
}
}