LoginSignup
155
152

More than 5 years have passed since last update.

列挙型(Enum)に文字列や数値を利用する備忘録

Last updated at Posted at 2015-04-19

Android の開発をしていると、値の取りうる値が数パターンの場合は、列挙型(Enum)を使いたくなります。

public enum Type {
    TYPE1,
    TYPE2,
    TYPE3,
}

列挙型をメソッドの引数にすると、取りうる値を制限できて何かと間違いが減りますし、

public void hoge(Type type) {
    //...
}

条件分岐のキーにしたりできて便利です。

switch (type) {
    case TYPE1:
         //...
         break;
    case TYPE2:
         //...
         break;
    case TYPE3:
         //...
         break;
}

ですが、列挙型に文字列や数値を使いたいこともあります(つまり数パターンの文字列や数値の表現に列挙型を利用する)。Androidの場合は Bundle に詰め込んだり、画面に表示したり、データストアに格納する時でしょうか。

文字列として利用する場合は、次のようにコンストラクタと、値の取得メソッドを定義します。

public enum Type {
    TYPE1("AAA"),
    TYPE2("BBB"),
    TYPE3("CCC"),
    ;

    private final String text;

    private Type(final String text) {
        this.text = text;
    }

    public String getString() {
        return this.text;
    }
}

普通に列挙型としても利用できますし、

Type type = Type.TYPE1;

次のように文字列としても利用できます。

String text = Type.TYPE1.getString();
Log.i("enumテスト", text); // AAA が出力される

同様に、数値として利用する場合は次のようにします。

public enum Type {
    TYPE1(10),
    TYPE2(20),
    TYPE3(30),
    ;

    private final int id;

    private Type(final int id) {
        this.id = id;
    }

    public int getInt() {
        return this.id;
    }
}

利用する場合は次のとおり。

int id = Type.TYPE1.getInt();
Log.i("enumテスト", "" + id); // 10 が出力される

更に次のように、複数の値を持たせることも出来ます。

public enum Type {
    TYPE1("AAA", 10),
    TYPE2("BBB", 20),
    TYPE3("CCC", 30),
    ;

    private final String text;
    private final int id;

    private Type(final String text, final int id) {
       this.text = text;
       this.id = id;
    }

    public String getString() {
        return this.text;
    }

    public int getInt() {
        return this.id;
    }
}
String text = Type.TYPE1.getString();
int id = Type.TYPE1.getInt();

Log.i("enumテスト", text); // AAA が出力される
Log.i("enumテスト", "" + id); // 10 が出力される

追記(2015/04/20)

数値等から Enum へ変換するメソッドも合わせて用意すると良さげ。

public class Hoge {

    public static enum Type {
        TYPE1(10),
        TYPE2(20),
        TYPE3(30),
        ;

        private final int id;

        private Type(final int id) {
            this.id = id;
        }

        public int getInt() {
            return this.id;
        }
    }

    public static Type getType(final int id) {
        Type[] types = Type.values();
        for (Type type : types) {
            if (type.getInt() == id) {
                return type;
            }
        }
        return null;
    }
}
Enumから数値への変換
int id = Hoge.Type.TYPE1.getInt();
数値からEnumへの変換
Type type = Hoge.getType(10);

追記(2015/05/07)

Enum の要素を文字列として表現したいだけであれば、特別なコンストラクタやメソッドを用意しなくても次のように変換できる。

Enumから文字列への変換
Type.TYPE1.name();
文字列からEnumへの変換
Type.valueOf("TYPE1");
155
152
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
155
152