问题
这是我的问题......我正在寻找(如果它存在)枚举等效于ArrayList.contains();.
这是我的代码问题的示例:
enum choices {a1, a2, b1, b2};
if(choices.???(a1)}{
//do this
}
现在,我意识到字符串的ArrayList将是更好的路径,但我必须通过其他地方的开关/案例运行我的枚举内容。因此我的问题。
假设不存在这样的事情,我怎么能去做呢?
谢谢!
#1 热门回答(152 赞)
请改用Apache commons lang3 lib
EnumUtils.isValidEnum(MyEnum.class, myValue)
#2 热门回答(135 赞)
这应该这样做:
public static boolean contains(String test) {
for (Choice c : Choice.values()) {
if (c.name().equals(test)) {
return true;
}
}
return false;
}
这种方式意味着你不必担心以后添加额外的枚举值,它们都会被检查。
编辑:如果枚举非常大,你可以将值粘贴在HashSet中:
public static HashSet<String> getEnums() {
HashSet<String> values = new HashSet<String>();
for (Choice c : Choice.values()) {
values.add(c.name());
}
return values;
}
然后你可以这样做:values.contains("your string")
返回true或false。
#3 热门回答(38 赞)
你可以使用Enum.valueOf
enum Choices{A1, A2, B1, B2};
public class MainClass {
public static void main(String args[]) {
Choices day;
try {
day = Choices.valueOf("A1");
//yes
} catch (IllegalArgumentException ex) {
//nope
}
}
如果你希望检查经常失败,你可能最好使用其他已显示的简单循环 - 如果你的枚举包含多个值,可能是builda HashSet或类似的枚举值转换为字符串并查询HashSet,