文字列からenumへ変更する方法を解説

java

enumクラスをもっと実用的に!そして便利に活用しましょう!
少し高度なテクニックになりますが、この応用編のやり方でコーディングすると、ソースコードがシンプルでより見やすいコードになるはずです!
基本編はこちらからどうぞ「今さら聞けないenumの基本編を解説

[スポンサーリンク]

この章でやること

今回は、文字列からenumの型を取得する方法を紹介します。
この技を知っていると、enumを定数のように使うことが出来ます。
これこそがenumの醍醐味だと思いますのでしっかりおさえましょう!

文字列→enumへの変換

package jp.co.javatech.num;


/**
 * String型の文字列からenum型へ変換します。
 */
public class EnumCall {

    /**
     * メイン処理
     * @param arg
     */
    public static void main(String arg[]) {
        // 文字列"1"からenumに変換しています。
        SampleEnum enuma1 = SampleEnum.getEnum("1");

        if (enuma1.equals(SampleEnum.AAA)) {
            System.out.println("取得したenum型:" + enuma1.toString());
        }

        // 文字列からenumに変換出来ない場合はnullになります。
        SampleEnum enuma2 = SampleEnum.getEnum("3");
        System.out.println("取得出来ない場合はnullが返却されます。:" + enuma2);
    }

    /**
     * enumクラス
     */
    public enum SampleEnum {

        AAA("1"),
        BBB("2");

        // メンバ変数の定義
        // このメンバ変数は必須です。
        private String name;

        /**
         * このメソッドも必須です。
         * @return enum型のvalue部分を返却します。
         */
        public String getName() {
            return name;
        }

        // コンストラクタの実装
        private SampleEnum (String name) {
          this.name = name;
        }

        // メソッドのオーバーライド
        public String toString() {
          return name;
        }

        /**
         * このメソッドは、文字列を元に、enumを返却します。
         * 例えば、値に1を指定すると、AAA(enum)を返却します。
         * @param str
         * @return
         */
        public static SampleEnum getEnum(String str) {
            // enum型全てを取得します。
            SampleEnum[] enumArray = SampleEnum.values();

            // 取得出来たenum型分ループします。
            for(SampleEnum enumStr : enumArray) {
                // 引数とenum型の文字列部分を比較します。
                if (str.equals(enumStr.name.toString())){
                    return enumStr;
                }
            }
            return null;
        }
    }
}

実行結果

>実行結果
取得したenum型:1
取得出来ない場合はnullが返却されます。:null

解説

文字列からenum型を取得するには、getEnumメソッドを実装する必要があります。メソッド名は「getEnum」となっていますが基本的には何でもOKです。
getEnumメソッドでは、引数(文字列)とenumのvalue部分を比較して、等しい場合に該当のenumを返却しています。

最後に

文字列からenum型へ。この技を覚えておくと色々な場面で流用できるかと思います。
特にデザインパターンのファクトリパターンを使う時など、この技は意外とメジャーです。
もちろんenumを使わなくても出来るのですが、enumを使った方が格段と可読性が上がります。(そして玄人ぽいソースに・・・)