言語のEnumクラスを以下のように定義していたとき、文字列の"EN"
や"JA"
からEnumに変換したくなった
public enum Language { EN("en"), JA("ja"); private final String code; Language(String code) { this.code = code; } public String getCode() { return code; } }
この場合にどうやるかがぱっと出てこなかったので調査
valueOfメソッドを使う
Language.valueOf(lang);
jshellで確認
jshell> public enum Language { ...> EN("en"), ...> JA("ja"); ...> private final String code; ...> Language(String code) { ...> this.code = code; ...> } ...> public String getCode() { ...> return code; ...> } ...> } | 次を作成しました: 列挙型 Language jshell> Language lang = Language.valueOf("EN"); lang ==> EN jshell> String langCode = lang.getCode(); langCode ==> "en"
定義していない列挙子の文字列を入れたら
定義していない列挙子の文字列を入れた場合、IllegalArgumentException例外が発生する
jshell> Language lang = Language.valueOf("KO"); | java.lang.IllegalArgumentException thrown: No enum constant REPL.$JShell$11.Language.KO | at Enum.valueOf (Enum.java:240) | at Language.valueOf (#1:1) | at (#4:1)
codeからEnumを取得する方法
コード値の"en"
や"ja"
からEnumを取得する方法は定義した列挙子の数だけループさせ、getCode
しながら付き合わせるしかないっぽい
public static Language getByCode(String code) { return Arrays.stream(Language.values()) .filter(data -> data.getCode().equals(code)) .findFirst() .orElse(null); }