Enum Javaのいまさらシリーズ

enumとは、プログラマが選んだ各々の識別子をそのまま有限集合として持つ抽象データ型

参考 wikipedia

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;
        }
    }
}

ABOUTこの記事をかいた人

hundredappsの管理人であり、ソフトウェア開発者です。 開発したソフトウェアで、世の中の不便を1つでも改善できたらと思います。