Java枚举开关

Java枚举开关,java,enums,switch-statement,Java,Enums,Switch Statement,我有一个简单的枚举 public enum Columns {VENDOR, ITEM}; 我试图提取并驱动一个开关代码块。 我得到的classNotFound似乎是枚举的内部类,b/c它显示了[class]\u A$0。我认为enum是一个静态的最终创建对象,可以直接在交换机中使用。有人能澄清一下吗 colObject="VENDOR"; for (Columns c : Columns.values()) { if (colObject.toUppe

我有一个简单的枚举

public enum Columns {VENDOR, ITEM};
我试图提取并驱动一个开关代码块。
我得到的
classNotFound
似乎是枚举的内部类,b/c它显示了
[class]\u A$0
。我认为enum是一个静态的最终创建对象,可以直接在交换机中使用。有人能澄清一下吗

      colObject="VENDOR";
      for (Columns c : Columns.values()) {
        if (colObject.toUpperCase().equals(c.name())) {
          System.out.println("Got it in iteration. i= " + i + " c= " +
                             c);
          switch (c.valueOf(colObject.toUpperCase())) {
            case VENDOR: {
              System.out.println("Got it in switch case= " + c.name());
            }
            break;
            default:
              System.out.println("Fell thru.");
              break;
          }//end switch
        }//end if
      }//end for
尝试:

尝试:


您可以使用
java.lang.Enum
class
Enum
类将帮助将
字符串“VENDOR”
转换为
Enum VENDOR

需要添加以下代码行

枚举值(Columns.class,colObject))

java.lang.Enum
可以多态使用,而列(
Enum
)不能多态使用

完整代码

enum Columns {
    VENDOR, ITEM
}

class Test {
    public static void main(String[] args) {
        String colObject = "VENDOR";

        switch (Enum.valueOf(Columns.class, colObject)) 
        {
            case VENDOR: {
                System.out.println("Got it in switch case= VENDOR");
                break;
            }
            default:
                System.out.println("Fell thru.");
                break;
            }
    }
}

您可以使用
java.lang.Enum
class
Enum
类将帮助将
字符串“VENDOR”
转换为
Enum VENDOR

需要添加以下代码行

枚举值(Columns.class,colObject))

java.lang.Enum
可以多态使用,而列(
Enum
)不能多态使用

完整代码

enum Columns {
    VENDOR, ITEM
}

class Test {
    public static void main(String[] args) {
        String colObject = "VENDOR";

        switch (Enum.valueOf(Columns.class, colObject)) 
        {
            case VENDOR: {
                System.out.println("Got it in switch case= VENDOR");
                break;
            }
            default:
                System.out.println("Fell thru.");
                break;
            }
    }
}

适用于我(输出为
“在switch case=VENDOR中获得”
)-无编译时或运行时错误。您能否提供一个完整的版本来重现这个问题,以及一些关于您正在使用的JDK版本的附加信息?是的,您的代码如图所示可以正常工作(尽管您确实需要从非静态上下文修复静态访问)。包括完整的堆栈跟踪和Andreas建议的SSCCE。对我有效(输出为
“在switch case=VENDOR中获得”
)-无编译时或运行时错误。您能否提供一个完整的版本来重现这个问题,以及一些关于您正在使用的JDK版本的附加信息?是的,您的代码如图所示可以正常工作(尽管您确实需要从非静态上下文修复静态访问)。按照Andreas的建议,包括完整堆栈跟踪和SSCCE。虽然在对象上而不是在类上调用静态方法(
valueOf()
)确实是一种不好的做法,但从技术上讲并没有什么区别。这两种变体都适用于我。虽然在对象上而不是在类上调用静态方法(
valueOf()
)确实是一种不好的做法,但从技术上讲并没有什么区别。这两种变体都适用于我。