当字符串包含破折号时启用枚举

时间:2013-03-27 18:26:58

标签: java enums switch-statement

我想使用enum作为切换字符串的方法,但是java抱怨我的字符串包含“ - ”。如下面的代码所示,IC19-01和IC19-02包含“ - ”。

public class CMain {
    public enum Model {
        IC19-01, IC19-02
    }

    public static void main(String[] args){
        String st = "IC19-01"; 
        switch (Model.valueOf(st)) {
            case IC19-01: 
                System.out.println("Case IC19-01");
                break;
        }
    }
}

我能为此做些什么?

3 个答案:

答案 0 :(得分:4)

Java不可能这样做,因为每个项必须是有效的标识符(有效的Java标识符可能不包含破折号)。

答案 1 :(得分:2)

这在Java中是不可能的。但是你可以将自己的实现作为一种解决方法,尽管它会产生更多的代码。您可以更改enum,如下所示:

 public enum Model {
    IC19_01("IC19-01"), 
    IC19_02("IC19-02")

    private final String name;

    private Model(String name){
     this.name = name;
    }

    public String getName(){
       return name;
    }

   public static Model getByName(String aName){
         for(Model current: Model.values()){
           if(current.getName().equalsIgnoreCase(aName.trim())){
              return current;
           }
          }
          return null;
    }
}

然后,您应该可以致电Model.getByName(st)而不是Model.valueOf。或者,在Java 7中,您应该能够切换实际的String

答案 2 :(得分:0)

  

块引用

枚举是类,应遵循类的约定。枚举的实例是常量,应遵循常量的约定。

  

块引用

有关此内容的详情,请参阅以下链接

Coding Conventions - Naming Enums 希望它有所帮助