バナー画像

Javaに限らずですが、わからないことを調べようとしてネット検索をしても、あと少しのところで「そうじゃない…そうじゃないんだよ」ってこと、結構ありませんか?スクリプトをバリバリ組める人が書けば書くほど無意識のうちに説明を端折っている場合が凄く多い気がします。本当に初心者の方(といっても最低限Javaの使い方や基本中の基本は他所で勉強してきてくださいね)が見ても納得のいく説明をしてくれてる親切なサイトって実は凄く貴重なんです。
本記事ではEnum(列挙型)についての解説をしていきます。因みに列挙型っていうのはEnumの名称定義です。これをみて「あーなるほど。そういうことだったのか」くらいは思ってもらえると非常に嬉しく思います。

Enum(列挙型)の特徴
  • 複数の定数(列挙子)をまとめて管理できる。
  • 定数が変更されるたびに書き換える必要が有る。
  • 列挙子に値を付与する場合、フィールドとコンストラクタを定義する必要が有る。
  • コンストラクタのアクセス修飾子はprivateのみ可能。

列挙型:定義

Enum(列挙型)の定義は以下の通りとなります。

修飾子 enum 型名 { 識別子1, 識別子2, ... }

それでは早速サンプルコードで確認してみましょう。

public class Main {
    
    public static void main(String[] args) {
        Kotoba tango = Kotoba.Hoge;  // Enumを取得
        System.out.println(tango);   // Hogeを出力
    }
    
    // 列挙子の定義
    protected enum Kotoba {
        Hoge,
        Fuga
    };

}

実行結果

Hoge

まずは基本形の定義です。ここではKotobaを定義しています。またKotobaを使用する為にオブジェクト宣言が必要になるため、オブジェクトとしてtangoを宣言しています。
宣言したオブジェクトに列挙子が格納されますので、結果としてHogeが出力されます。Enumが保持している定数(列挙子)のみを取得する為、他の文字列が出力されることはありません。これがEnumのメリットでもあります。

Switch文

次はSwitch文で使う場合の説明です。
Switch文についてもJava7からは記述が簡潔になりました。簡単に見てみましょう。

public class Main {
    
    public static void main(String[] args) {
        Kotoba tango = Kotoba.Hoge;  // Enumを取得
        
        switch(tango) {
            case Hoge:
                System.out.println("ほげ"); // 条件"Hoge"出力
                break;
            case Fuga:
                System.out.println("ふが"); // 条件"Fuga"出力
                break;
        }
    }
    
    // 列挙子の定義
    protected enum Kotoba {
        Hoge,
        Fuga
    };

}

実行結果

ほげ

組み合わせて使う

Enumは複数の型を組み合わせて使うことも出来ます。

public class Main {
    
    public static void main(String[] args) {
        Kotoba tango = Kotoba.Fuga;  // Enumを取得
        
        System.out.println(tango.getId());
        System.out.println(tango.getMoji());
    }
    
    // 列挙子の定義
    protected enum Kotoba {
        Hoge(1, "ほげ"),
        Fuga(2, "ふが");
        
        private int id;
        private String moji;
        /*
        メンバ変数を定義している場合、修飾子は必ずprivateであることに注意してください。
        これ以外のアクセス修飾子にしてしまうとコンパイルエラーとなります。
        */
        private Kotoba(int id, String moji) {   // コンストラクタの呼び出し
            this.id = id;
            this.moji = moji;
        }
        
        public int getId() {
            return id;
        }
        
        public String getMoji() {
            return moji;
        }
    };
    
}

実行結果

2
ふが

列挙子のフィールドに「Hoge」「Fuga」をそれぞれ設定し、同時にコンストラクタの実装、それからメソッドを追加しています。
このように複数の値を設定することも可能です。

メソッドの使い方

Enumには予め用意されたいくつかのメソッドがありますが、その一つである「valueOf」について説明していきます。

valueOfメソッド

enumのvalueOfは引数で渡した文字列から列挙子名を取得するときに使います。早速サンプルコードを見てみましょう。

public static void main(String[] args) {
    Kotoba hoge = Kotoba.valueOf("Hoge");
    System.out.println(hoge.getMoji());
}

実行結果

ほげ

このコードでは”Hoge”という文字列で”Kotoba”という型名に参照をかけています。
今回は合致する列挙子があったため、列挙子に予め定義したString型のフィールドが返ってきています。
一致する列挙子が無い場合にはIllegalArgumentExceptionが返ってきます。

ポテパンダの一言メモ

valueOfメソッド以外にも予め用意されているメソッドがありますが、そのメソッドのうちのいくつかを紹介します。
values()
定義した列挙子を定義された順に全て返す
toString()
宣言した文字列を取得する
ordinal()
定義された列挙子の順番を返す

Enumを使う場合の注意

列挙型はクラスの一種と考えてください。上でも簡単にコードを書きましたが、フィールドやコンストラクタも定義することが出来ます。
またコンストラクタを定義することで初期値にint型やString型を設定することも可能です。
初期値を設定する場合にはフィールドの定義を忘れないようにしてください。

public enum Kotoba {
    Hoge(1, "ほげ"),
    Fuga(2, "ふが");
    
    //フィールドの定義
    private int id;
    private String moji;
    
    // コンストラクタの定義
    private Kotoba(int id, String moji) {   
        this.id = id;
        this.moji = moji;
    }
    
    // メソッドの呼び出し
    public int getId() {
        return id;
    }
    //メソッドの追加
    public String getMoji() {
        return moji;
    }
};

なおコンストラクタを定義する場合にはアクセス修飾子はprivateのみ使用可能となることに注意してください。
また、フィールドの定義やコンストラクタ処理を記述しない場合にはコンパイルエラーが発生します。
値を設定するときには、フィールド、コンストラクタ、メソッドを一つのセットとして記述することを覚えておきましょう。

まとめ

今回はEnum(列挙型)についてご説明しましたが、初心者の方にも恐らく十分に理解いただける内容となっているはずです。
プログラミングを始めたくても、いきなりわからないことだらけでネットを見ても十分な説明が無い場合、本当に嫌になりすぐに投げ出してしまいますよね。
こうやってひも解いて考えていけば意外とプログラミングって簡単なんだって思える部分も多いと思います。
これを機会に是非本格的に勉強していきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。