今さら聞けないenumの基本編を解説

java

この章では、enumのメリットと基本的な使い方を解説していきます。
java5からの機能のenumですが、一昔前ではあまり馴染みがありませんでしたが、最近では当たり前のように使われています。
このenumですが、かなり使える技です。
ソースの可読性が上がるので積極的に使いましょう!

[スポンサーリンク]

enumって何?

enumを検索すると「列挙型」というキーワードがよく出てくると思います。
「列挙型」と言われてもよく分からないですね。。
私も列挙型と聞いてよく分かりませんでした。
ソースを理解することによって初めて「列挙型」の意味が理解出来た思い出があります。(^^;
この章ではenumの使い方とメリットをサンプルソールで解説します。

enumを使うことのメリット

まずはenumを使っていないパターンのソースを紹介していきます。

    private static int OK = 1;
    private static int Success=2;

    // ・
    // メインメソッドは省略
    // ・

    private static String check(int i) {
        if (i == OK) {
            return "OKです。";
        } else if (i == Success) {
            return "成功です。";
        }
        return null;
    }
>実行結果
OKです。

checkメソッドは、引数が1だったら「OKです。」を返却しています。
引数が2だったら、「成功です。」を返却しています。
それ以外だったら、nullを返却しています。

デメリットとして以下の2つが考えられます
1:nullを返却したくない場合は、エラー処理を入れなければなりません。
2:checkメソッドの引数はintになっているので、使う側からは何を指定してよいのか分かりません。

そこでenumの登場

enumを使うことによって、上記のcheckメソッドに1、2以外が指定されることをブロックすることが出来ます。
1、2以外はダメ!と宣言されていれば、checkメソッドを使う側から見ても仕様が非常に明確ですね。

上記のソースをenumに置き換えてみる。

enumを使った非常にシンプルなサンプルです。

package jp.co.javatech.num;

/**
 * enum型を判断するクラスです。
 *
 */
public class OkExampl {

    /**
     * メイン処理
     */
    public static void main(String arg[]) {
        // checkメソッドの引数へintではなく、CheckEnum型を渡しています。
        System.out.println(check(CheckEnum.Success));
    }

    /**
     * 先ほどのcheckメソッドからの変更点は、
     * 引数へintではなく、CheckEnum型を指定しています。
     * 
     * @param checkEnum
     * @return
     */
    private static String check(CheckEnum checkEnum) {
        if (checkEnum == CheckEnum.OK) {
            return "OKです。";
        } else if (checkEnum == CheckEnum.Success) {
            return "成功です。";
        }
        return null;
    }

    /**
     * これがEnumで宣言したクラスになります。
     * このクラスには、値が2つしか存在しません。
     *
     */
    private enum CheckEnum {
        OK,
        Success;
    }
}

実行結果

>実行結果
成功です。

解説 その1

上記クラスの「private enum CheckEnum」がenum型のクラスになります。
enumを使う場合は、このようにenumクラスを用意する必要があります。
CheckEnumクラスに「OK」と「Success」を列挙しています。enumが列挙型と言われている理由はここにあります。

解説 その2

またenumを扱う場合の特徴として、checkメソッドを見て下さい。
intの代わりに、CheckEnumクラスを引数としています。
checkメソッドの引数をintからCheckEnumクラスに変えることで、呼び出し側はどの値を指定すればよいかが明確になりました。

色々な型をenumに変更する

Stringやintの型をenumに変更する方法をこちらのページで紹介しています。
こちらも併せて参考にしてみて下さい。
文字列からenumへ変更する方法
数値(int)からenumへ変更する方法

enumをif・switch文で比較する

if・switch文でenumを比較する方法をこちらのページで紹介しています。
Enumの比較方法(if・switch文)

最後に

enumの簡単な使い方はいかがでしたか?
定数をStringやintで定義するよりも、enumで定義した方が、ソースの可読性が上がります。

enumを使うことによる一番のメリットは、ソースを保守するうえで、非常にソースが読みやすくなることだと思います。
Stringやintのフラグや定数は、ソースをスパゲティにする元凶だと考えています。
javaには、enumという素晴らしい技があるので積極的に使いましょう!
それでは!