枚举,用于开关盒

时间:2010-05-14 17:36:47

标签: java enums

我有一个Enum定义,它包含方法返回类型,如“String”,Float,List,Double等。

我将在switch case语句中使用它。 例如,我的枚举是

public enum MethodType {
    DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG;
}

在属性文件中,我有如下键值对。 测试1 =字符串 TEST2 =双

在我的代码中,我获得了密钥的值。我需要在Switch Case中使用VALUE来确定类型,并基于此我要实现一些逻辑。 比如像这样的东西

switch(MethodType.DOUBLE){
     case DOUBLE:
        //Dobule logic
}

有人可以帮我实现吗?

4 个答案:

答案 0 :(得分:21)

我想这就是你要找的东西:

public class C_EnumTest {
    public enum MethodType {
        DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG;
    }
    public static void main( String[] args ) {
        String value = "DOUBLE";
        switch( MethodType.valueOf( value ) ) {
        case DOUBLE:
            System.out.println( "It's a double" );
            break;
        case LIST:
            System.out.println( "It's a list" );
            break;
        }
    }
}

如果不区分大小写,您可以执行MethodType.valueOf( value.toUpperCase() )

答案 1 :(得分:6)

这可能会更接近您的需求。在这种情况下,您可以将propertyName属性设置为您需要的任何内容:

public enum MethodType {

  STRING("String"),
  LONG("Long"),
  DOUBLE("Double"),
  THING("Thing");

  private String propertyName;

  MethodType(String propName) {
    this.propertyName = propName;
  }

  public String getPropertyName() {
    return propertyName;
  }

  static MethodType fromPropertyName(String x) throws Exception {
    for (MethodType currentType : MethodType.values()) {
      if (x.equals(currentType.getPropertyName())) {
        return currentType;
      }
    }
    throw new Exception("Unmatched Type: " + x);
  }
}

答案 2 :(得分:5)

您已定义枚举,但您需要定义 该类型的变量。像这样:

public enum MethodType { ... }

public MethodType myMethod;

switch (myMethod)
{
    case MethodType.DOUBLE:
        //...
        break;
    case MethodType.LIST:
        //...
        break;
//...
}

修改

以前,此代码段使用var作为变量名称,但这是一个保留关键字。已更改为myMethod

答案 3 :(得分:3)

你根本不需要一个开关(这在java btw中,所以可能不适合你):显然你会想要添加一些空检查,更好的异常处理等。

public enum MethodType {

        String,LONG,DOUBLE,THING;

        static MethodType fromString(String x) throws Exception {
            for (MethodType currentType: MethodType.values()){
                if (x.equals(currentType.toString())){
                    return currentType;
                }
            }
            throw new Exception("Unmatched Type");
        }
    }