2013-03-27 179 views
4

我想使用枚举作为切换字符串的方式,但是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; 
     } 
    } 
} 

我能做些什么?

+0

你为什么不用'_'来代替'-'(下划线)? – niculare 2013-03-27 18:31:33

+0

我会只有当这是最后一个选项。如果可能,我想保持我的代码清洁。 – 2013-03-27 18:32:46

回答

0

块引用

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

块引用

这个细节可以在下面的链接中找到

Coding Conventions - Naming Enums 希望它可以帮助

4

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

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

+0

此解决方案将永远不会工作(current.equalsIgnoreCase不存在) – treaz 2017-11-24 09:02:12

+1

equalsIgnoreCase是一种来自String的方法,它的目的是在检查之前获取当前的名称。编辑以反映这一变化 – Sednus 2017-11-28 15:20:18