1

给定以下代码...

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”?

4

4 回答 4

3

枚举值不是字符串。做这个 :

Arrays.asList(EventTypes.values()).contains(EventTypes.WORK));

如果您想知道您的字符串是否是枚举值的名称,请执行

boolean exist = false;
try {
    EventTypes.valueOf("WORK");
    exist = true; 
} catch (IllegalArgumentException e) {}
于 2012-10-11T10:18:42.837 回答
2

您可以删除引号,但如果不能,您可以解析字符串。

Arrays.asList(EventTypes.values()).contains(EventTypes.valueOf("WORK"))

一个脆弱但简单的方法是比较字符串

Arrays.toString(EventTypes.values()).contains("WORK")

后者可能适用于单元测试,但不适用于生产代码。

于 2012-10-11T10:22:06.813 回答
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");
于 2012-10-11T10:28:35.050 回答
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");
            }
        }
    }
}
于 2012-10-11T10:25:48.387 回答