枚举值未与开关中的枚举进行比较

时间:2018-12-03 12:35:29

标签: java enums

在Constants类中,我有一个带有一些名称的Enum:

static final enum NAMES {
    One,
    Two,
    Three,
    Four,
    Five
}

我试图通过:

 for (Constants.NAMES name in Constants.NAMES.values())

然后在开关中使用它们:

 switch (index.key) {
     case Constants.NAMES.One:

我还尝试仅使用One作为大小写,并使用Enumset进行循环,唯一可行的方法是使用“ One”作为字符串,但这违背了Enum的目的

这有效:

    for (Constants.NAMES script : Constants.NAMES.values()) {
        switch (index.key) {
            case Constants.NAMES.ONE.name():

1 个答案:

答案 0 :(得分:0)

定义您的枚举,如下所示:

enum NAMES {
    ONE, TWO, THREE, FOUR, FIVE
}

static final是与声明枚举一起使用的非法修饰符。另外,请确保常量仅使用大写字母定义。

然后使用:

public static void main(String[] args) {
    String myStr = "something";
    switch (NAMES.valueOf(myStr)) {

    case ONE:
        break;

    case TWO:
        break;

    // the rest 

    default:
        break;
    }

}

或者,您可以创建一个静态方法来从enum

获取结果
enum NAMES {
    ONE, TWO, THREE, FOUR, FIVE;

    public static NAMES fetchValue(String constant) {
        NAMES name = null;
        for (NAMES num : EnumSet.allOf(NAMES.class)) {
            if (num.name().equals(constant)) {
                name = NAMES.valueOf(constant);
            }
        }
        return name;
    }
}

并使用:

NAMES names = NAMES.fetchValue("ONE");

采用这种方法,即使找不到常量,代码也不会中断。