2

我有一个这样的枚举:

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();
}

但是我的枚举可能太长了,我不想遍历数组。我想使用地图或集合。另一方面,我不想在我的枚举中使用另一个变量。

如何检查我的枚举是否有 langName?

4

2 回答 2

3

好吧,如果每个枚举常量都代表一种语言(如代码所示),那么我将使用 EnumSet。

Set<Lang> langs = EnumSet.allOf(Lang.class);

然后我可以检查一种语言是否已经存在。喜欢

if(langs.contains(Lang.EN) {
  //...
}

不确定这是否是您正在寻找的答案。EnumSet 的 contains 方法甚至不会遍历内部集合。内部集合将存储在一个数组中,并根据哈希计算找到一个元素。因此,这实际上应该可以实现您在问题中的要求。

于 2013-08-19T16:27:53.433 回答
1

怎么用valueOf

Lang lang = null;

try {
  lang = Lang.valueOf(enumName);
  // enum exists
} catch (IllegalArgumentException e) {
  // enum does not exist
}

由于您的枚举名称只是大写的语言名称,因此您可以将语言名称大写并将其传递给valueOf.

于 2013-08-19T16:35:48.403 回答