Java枚举开关

时间:2013-04-03 11:35:08

标签: java enums switch-statement

我有一个简单的枚举

public enum Columns {VENDOR, ITEM};

我正在尝试提取并驱动开关代码块 我得到的classNotFound看起来是enum的内部类,b / c显示[class]_A$0。我认为枚举是一个静态的最终和创建的对象,我可以直接在交换机中使用。有人可以澄清吗?

      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

2 个答案:

答案 0 :(得分:4)

尝试:

switch (Columns.valueOf(colObject.toUpperCase())) {

答案 1 :(得分:2)

您可以使用java.lang.Enum课程。 Enum课程有助于将您的String "VENDOR"转换为enum-VENDOR

需要添加以下代码行

  

Enum.valueOf(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;
            }
    }
}