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

新手上路,请多包涵

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

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

在尝试使用相关枚举之前,我想检查“banana”是否是我的枚举值之一。我可以遍历将我的字符串与

Fruit.values()[i].fruitname

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

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

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

编辑:最后我接受了 NawaMan 的建议,但感谢大家提供的所有有用信息。

原文由 davek 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 391
2 个回答

我真的不知道内置的解决方案。所以你可能不得不自己把它写成一个静态方法。

 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;
   }
   ...
}

原文由 NawaMan 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

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

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

原文由 kman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题