🎯

【Java】クラス解説41・列挙型

2024/07/31に公開

列挙型

列挙型(enum)は、定数の集合を扱うための特殊なクラスです。列挙型を使うことで、コードの可読性と保守性が向上し、誤った値の使用を防ぐことができます。
また、列挙型の値である定数を列挙子と呼び、一般的に、その列挙子の記述方法は大文字で記述し、単語の区切りにはアンダースコア( _ )を使用します。
そして、各列挙子は、列挙型のインスタンスでもあります。

列挙型の定義方法と列挙子を出力するコード例

public class Main {

    // Plants という列挙型を定義
    enum Plants {
        FUZI,
        SAKURA,
        MATHU
    }

    public static void main(String... args) {
        // 列挙子を出力
        System.out.println(Plants.FUZI);
    }
}

出力結果はFUZIとなります。


列挙子を引数として利用するコード例

public class Main {

    // 列挙型を定義
    enum Plants {
        FUZI,
        SAKURA,
        MATHU
    }

    public static void main(String... args) {
        // printPlantsメソッドを呼び出し、実引数として列挙子を渡す
        printPlants(Plants.FUZI);
    }

    // printPlantsメソッドを定義し、仮引数plantsに列挙子を受け取る
    static void printPlants(Plants plants) {
        if (plants == Plants.FUZI) {
            System.out.println("フジ");
        } else if (plants == Plants.SAKURA) {
            System.out.println("サクラ");
        } else if (plants == Plants.MATHU) {
            System.out.println("マツ");
        }
    }
}

出力結果はフジとなります。


列挙型のコンストラクタの定義方法のコード例

public class Main {

    // 列挙型を定義し、列挙子の引数を渡す
    enum Plants {
        FUZI("フジ"),
        SAKURA("サクラ"),
        MATHU("マツ");

        // コンストラクタを定義し、列挙子の引数を受け取る
        Plants(String name) {
            System.out.println(name);
        }
    }
    public static void main(String... args) {
        // 列挙型を参照して、列挙子を初期化し、コンストラクタを実行させる
        System.out.println(Plants.FUZI);
    }
}

出力結果はフジ、サクラ、マツ、FUZIとなります。


列挙型のインスタンス変数を定義して、それを出力するコード例

public class Main {

    // 列挙型
    enum Plants {
        FUZI("フジ"),
        SAKURA("サクラ"),
        MATHU("マツ");

    	// インスタンス変数を定義
        private String name;
    	
    	// コンストラクタ
        Plants(String name) {
            this.name = name;
            // インスタンス変数を出力
            System.out.println(this.name);
        }
    }
    public static void main(String... args) {
        // 列挙型を参照
        System.out.println(Plants.FUZI);
    }
}

出力結果はフジ、サクラ、マツ、FUZIとなります。


列挙型のメソッドを定義して、それにアクセスするコード例

public class Main {

    // 列挙型
    enum Plants {
        FUZI("フジ"),
        SAKURA("サクラ"),
        MATHU("マツ");

    	// インスタンス変数
        private String name;
    	
    	// コンストラクタ
        Plants(String name) {
            this.name = name;
        }
        
        // インスタンス変数の値を返す getNameメソッド を定義
        public String getName() {
            return this.name;
        }
        
    }
    public static void main(String... args) {
        // 列挙型の getNameメソッド にアクセス
        System.out.println(Plants.FUZI.getName());
    }
}

出力結果はフジとなります。


列挙型の values メソッドを使って、全ての列挙子を出力するコード例

public class Main {

    // 列挙型
    enum Plants {
        FUZI,
        SAKURA,
        MATHU;
    }
    
    public static void main(String... args) {
        // 列挙型の values メソッドを使って、全ての列挙子を出力
        for (Plants p : Plants.values()) {
            System.out.println(p);
        }
    }
}

出力結果はFUZI、SAKURA、MATHUとなります。


列挙型の valueOf メソッドを使って、列挙子を出力するコード例

public class Main {

    // 列挙型
    enum Plants {
        FUZI,
        SAKURA,
        MATHU;
    }
    
    public static void main(String... args) {
        // 列挙型の valueOf メソッドを使って、列挙子を出力する
        Plants p1 = Plants.valueOf("FUZI");
        System.out.println(p1);
        Plants p2 = Plants.valueOf("SAKURA");
        System.out.println(p2);
        Plants p3 = Plants.valueOf("MATHU");
        System.out.println(p3);
    }
}

出力結果はFUZI、SAKURA、MATHUとなります。


Discussion