【问题标题】:Enum with constructor in switch-statement在 switch 语句中使用构造函数枚举
【发布时间】:2015-07-09 07:27:09
【问题描述】:

这可能是一个愚蠢的问题,但我不明白为什么它不起作用:

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;
        }
    }
}

编译器注意到“需要常量字符串表达式”。提前感谢您的解释。

【问题讨论】:

  • 这里的构造函数应该是私有的。

标签: java enums core


【解决方案1】:

与您的 enum 无关,但与您的 switch 语句无关,它需要在其 case 子句中使用常量。 case需要像"helloWorld"这样的常量表达式,表达式Header.LimitType.getValue()可能返回一个永远不会改变的值,但它不是编译器的常量表达式。

【讨论】:

  • 谢谢!那么,如果我需要在 switch/case 中使用硬编码字符串,枚举不是这样吗?是否只有一种出路是为此目的使用最终的字符串字段?
  • @aime 如果getValue() 是永远不会改变的东西,您可以使用枚举本身而不是字符串,例如case Header.LimitType:case Header.ValueType:
  • 我明白了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多