我有一个这样的枚举:
public enum Lang {
TR("tr"),
EN("en"),
SE("se");
private String langName;
private Lang(String langName) {
this.langName = langName;
}
}
在另一个班级我想检查是否存在langName。如果我使用getter方法,我可以迭代langNames:
for (Lang langEnum : Lang.values()) {
langEnum.getLangName();
}
但是我的枚举可能太长了,我不想迭代一个数组。我想使用Map或Set。另一方面,我不想在我的枚举中使用另一个变量。
如何检查我的枚举是否有langName?
答案 0 :(得分:3)
好吧,如果每个枚举常量代表一种语言(如代码所示),那么我会使用EnumSet。
Set<Lang> langs = EnumSet.allOf(Lang.class);
然后我可以检查一种语言是否已存在。像
if(langs.contains(Lang.EN) {
//...
}
不确定这是否是您正在寻找的答案。 EnumSet的contains方法甚至不会迭代内部集合。内部集合将存储在一个数组中,并根据哈希计算查找元素。所以,事实上,这应该达到你在问题中所要求的。
答案 1 :(得分:1)
如何使用valueOf
?
Lang lang = null;
try {
lang = Lang.valueOf(enumName);
// enum exists
} catch (IllegalArgumentException e) {
// enum does not exist
}
由于您的枚举名称只是大写的语言名称,因此您可以将语言名称大写并将其传递到valueOf
。