给出以下代码......
private enum EventTypes {
WORK, BREAK, WAIT, CLOSE, COMPLETE
}
public static void main(String[] args) {
System.out.println("BREAK : " + EventTypes.BREAK);
System.out.println(Arrays.asList(EventTypes.values()).contains("WORK"));
System.out.println(Arrays.asList(EventTypes.values()).contains("WOR"));
}
这会产生输出......
BREAK : BREAK
false
false
现在,从输出中我可以看到“BREAK”作为字符串存在 - 那么为什么它相信“WORK”在上面的枚举中不存在?
答案 0 :(得分:3)
枚举值不是字符串。这样做:
Arrays.asList(EventTypes.values()).contains(EventTypes.WORK));
如果您想知道您的字符串是否是枚举值的名称,请执行
boolean exist = false;
try {
EventTypes.valueOf("WORK");
exist = true;
} catch (IllegalArgumentException e) {}
答案 1 :(得分:1)
您可以删除引号,但如果不能,则可以解析字符串。
Arrays.asList(EventTypes.values()).contains(EventTypes.valueOf("WORK"))
一种脆弱但简单的方法是比较字符串
Arrays.toString(EventTypes.values()).contains("WORK")
后者可能适用于单元测试但不适合生产代码。
答案 2 :(得分:1)
您可以添加contains
private enum EventTypes {
WORK, BREAK, WAIT, CLOSE, COMPLETE;
public static boolean contains(String str) {
for (EventTypes enumtype : values()) {
if (enumtype.name().contains(str))
return true;
}
return false;
}
}
然后您可以像下面一样使用它。
System.out.println(EventTypes.contains("WORK"));
System.out.println(EventTypes.contains("WOR"));
记住枚举是常量,我不知道你会做到这一点。 您可以在Enum Types
上阅读有关枚举的更多信息正确使用
EventTypes enumType =EventTypes.valueOf("WORK");
答案 3 :(得分:0)
以这种方式试试......
enum EventTypes {
WORK, BREAK, WAIT, CLOSE, COMPLETE
};
public class T {
public static void main(String[] args) {
for(EventTypes e : EventTypes.values()){
if(e.name().equals("WORK")){
System.out.println("True");
}else{
System.out.println("False");
}
}
}
}