我想查找一个枚举集,知道经常会有一个不匹配抛出异常:我想检查之前执行查找值存在,以避免例外。我的枚举看起来是这样的:使用枚举之前检查有效的枚举值
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
,但我希望能够像做(pseduo码):
if (Fruit.values().contains(myStringHere)) {...
这可能吗?我应该完全使用别的东西吗(Arrays?Maps?)?
编辑:最后我已经用了NawaMan的建议,但是感谢大家对所有有用的输入。
“values()”每次都会创建一个克隆数组,因此最好不要经常调用它。只调用一次并缓存结果,或使用“EnumSet.allOf(Fruit.class)”。 – dogbane 2010-03-30 13:10:33
在JDK 1.7上已修复。在JDK 1.5中,稍后有解决此问题的评论。不知道JDK 1.6中会发生什么。 – alexsmail 2012-02-09 16:24:24
请注意,此解决方案对于许多值而言速度很慢。相反,最好做一些像http://stackoverflow.com/a/2546726/260805。 – Ztyx 2015-04-09 08:33:36