2015-04-29 82 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