数値(int)からenumへ変更する方法を解説

java

enumに関しての記事は過去に2つほどアップしました。
今さら聞けないenumの基本編を解説
文字列からenumへ変更する方法を解説

記事をアップしてからしばらくして、「Enumへ変換する頻度は、Stringよりもintの方が多い!」という意見を多数頂きました。
今回はintからEnumに変換する方法を紹介します。

[スポンサーリンク]

intからenumに変更する方法は、文字列からenumへ変更する方法を流用することで実現できます。
変換の流れは、「文字列→enum」も「int→enum」もほぼソースコードに変わりはありません。

この章でやること

数値(int)からenumの型を取得する方法を紹介します。

数値(int)→enumへの変換

package com.example.app.enumex;

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

        System.out.println("取得したenum:" + enuma1);
    }

    /**
     * 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 num
         * @return
         */
        public static SampleEnum getEnum(int num) {
            // enum型全てを取得します。
            SampleEnum[] enumArray = SampleEnum.values();

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

実行結果

>実行結果
取得したenum:1

解説

冒頭でも触れました通り、「文字列→enum」も「int→enum」も同じ流れで変換が出来ます。
「int→enum」で、文字列からenumへ変更する方法と異なる点は、
61行目で、Enumに設定されている値「1」を文字列(String)から数値(int)に一度変更して、つけあわせを行っています。

最後に

今回はintからEnumへ変更する方法を紹介しました。
この方法であれば、intがfloatやdoubleになっても、基本的には同じ方法で変換出来ます。

今回紹介したサンプルソースは、enumへ変換するあらゆる場面で使いまわしが出来ると考えています。
使いたい場面に合わせて使って頂ければ幸いです。
それでは!