2015-04-29 108 views
2

構造這可能是一個愚蠢的問題,但我不明白爲什麼它不工作:枚舉在switch語句

public class MainClass { 

    public enum Header{ 
     ValueType("Value Type"), 
     LimitType("Limit Type"), 
     Currency("Currency"); 

     Header(String value) { 
      this.value = value; 
     } 

     private final String value; 

     public String getValue(){ 
      return value; 
     } 
    } 

    static void getHeaderValue (String headerValue) { 

     switch (headerValue) { 
      case Header.LimitType.getValue() : 
       System.out.println(Header.LimitType.getValue()); 
       break; 
      case Header.ValueType.getValue() : 
       System.out.println(Header.ValueType.getValue()); 
       break; 
      case Header.Currency.getValue() : 
       System.out.println(Header.Currency.getValue()); 
       break; 
      default: 
       break; 
     } 
    } 
} 

的編譯器會發現「常量字符串表達式要求」。預先感謝您的解釋。

+0

這裏的構造函數應該是私有的。 – async

回答

6

無關,與你的枚舉但你開關語句,它需要在其情況下條款常數。 case需要像"helloWorld"這樣的常量表達式,表達式Header.LimitType.getValue()可能會返回一個永不會更改的值,但它不是編譯器的常量表達式。

+0

謝謝!所以,如果我需要在開關/情況下使用硬編碼字符串,枚舉不是這種情況?是否只有一個出路是爲了這個目的使用最終的字符串字段? – aime

+0

@aime if'getValue()'是永遠不會改變的東西,你可以使用枚舉本身而不是字符串,比如'case Header.LimitType:',case Header.ValueType:'等 – morgano

+0

我明白了。謝謝! – aime