2013-03-27 52 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