使用枚举之前检查有效的枚举值

2022-09-01 08:00:02

我正在尝试查找枚举集,因为我知道通常会有一个不匹配的枚举,这会引发异常:我想在执行查找之前检查值是否存在以避免异常。我的枚举看起来像这样:

public enum Fruit {
    APPLE("apple"),
    ORANGE("orange");
    ;
    private final String fruitname;
    Fruit(String fruitname) {
        this.fruitname = fruitname;
    }
    public String fruitname() {return fruitname;}
}

我想在尝试使用相关枚举之前检查“香蕉”是否是我的枚举值之一。我可以循环访问允许的值,将我的字符串与

Fruit.values()[i].fruitname

但我希望能够做这样的事情(伪代码):

if (Fruit.values().contains(myStringHere)) {...

这可能吗?我应该完全使用其他东西(数组?地图?)?

编辑:最后,我接受了NawaMan的建议,但感谢大家的所有有用输入。


答案 1

我真的不知道内置的解决方案。因此,您可能必须自己将其编写为静态方法。

public enum Fruit {
   ...
   static public boolean isMember(String aName) {
       Fruit[] aFruits = Fruit.values();
       for (Fruit aFruit : aFruits)
           if (aFruit.fruitname.equals(aName))
               return true;
       return false;
   }
   ...
}

答案 2

有一个apache commons lang EnumUtils.isValidEnum()。不幸的是,在引擎盖下,这是使用try/catch逻辑并返回布尔值,但至少你的代码看起来很干净:

if(EnumUtils.isValidEnum(Fruit.class, fruitname)) { ....

您将需要使用最新的 commons-lang3 库,因为 commons-lang 2.x 没有此功能。