日々精進

新しく学んだことを書き留めていきます

Javaで列挙型に任意の文字列を使う

以下のようにprivateコンストラクタを定義して、コンストラクタにEnumに持たせたいデータを渡す。

public enum Channel {
    EMPLOYEE("employee"),
    AGENT("agent"),
    CUSTOMER("customer"),
    ;

    private final String text;

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

    /**
     * チャネル種別の文字列表現
     * @return
     */
    public String getString() {
        return this.text;
    }

    /**
     * 文字列をEnumに変換する
     * @param id
     * @return
     */
    public static Channel getChannel(final String id) {
        Channel[] types = Channel.values();
        for (Channel type : types) {
            if (type.getString().equals(id)) {
                return type;
            }
        }
        return null;
    }
}

参考:

qiita.com