Java 当字符串包含破折号时打开枚举

Java 当字符串包含破折号时打开枚举,java,enums,switch-statement,Java,Enums,Switch Statement,我想使用enum作为切换字符串的一种方式,但是java抱怨我的字符串包含“-”。如以下代码所示,其中IC19-01和IC19-02包含“-” 我能为此做些什么 大宗报价 枚举是类,应该遵循类的约定。枚举实例是常量,应遵循常量的约定 大宗报价 有关详细信息,请访问以下链接 希望对您有所帮助这在Java中是不可能的,因为每个项都必须是有效的标识符(并且有效的Java标识符可能不包含破折号)。这在Java中是不可能的。但是您可以将自己的实现作为一种变通方法,尽管它会产生更多的代码。您可以按如下方式更

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

我能为此做些什么

大宗报价

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

大宗报价

有关详细信息,请访问以下链接


希望对您有所帮助

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

这在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中,您应该能够切换实际的
字符串

,为什么不将
-
替换为
(下划线)?只有当这是最后一个选项时,我才会这样做。如果可能的话,我想保持我的代码干净。这个解决方案永远不会工作(current.equalsIgnoreCase不存在)equalsIgnoreCase是String中的一个方法,它的目的是在检查之前获取current的名称。编辑以反映这一变化
 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;
    }
}