java - 枚举值不与 switch 中的枚举进行比较

标签 java enums

我有一个枚举,其中在 Constants 类中包含一些名称:

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

我尝试通过以下方式浏览它们:

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

然后在 switch 中使用它们:

 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():

最佳答案

定义您的枚举如下:

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 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");

在这种方法中,即使没有找到常量,代码也不会中断。

关于java - 枚举值不与 switch 中的枚举进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53593979/

相关文章:

java - 使用 selenium webdriver 找不到下拉列表元素

java - 如何在java中将接收到的字节显示为文本?

java - 不允许在 Java 方法覆盖上使用父类(super class)型的原因是什么?

c# - 如何将枚举类型映射到 tinyint

python - 如何以与名称属性相同的方式打印组合标志

python - 类 Enum 中的新值被数据库拒绝

java - 从 Math.cos() 输出值获取输入 float

java - 安卓 Java : Add absolute positioned view on screen

java - 为什么枚举序数不是常量表达式?

java - 获取枚举实例