Java switch语句中带构造函数的枚举

Java switch语句中带构造函数的枚举,java,enums,core,Java,Enums,Core,这可能是一个愚蠢的问题,但我不明白为什么它不起作用: public class MainClass { public enum Header{ ValueType("Value Type"), LimitType("Limit Type"), Currency("Currency"); Header(String value) { this.value = value; }

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

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

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

与您的枚举无关,但与您的switch语句有关,switch语句在其case子句中需要常量case需要常量表达式,如
“helloWorld”
,表达式
头.LimitType.getValue()
可能会返回一个永远不会更改的值,但它不是编译器的常量表达式。

这里的构造函数应该是私有的。谢谢!那么,如果我需要在switch/case中使用硬编码字符串,枚举不是吗?唯一的解决方法是使用最终字符串字段吗?@aime如果
getValue()
是永远不会改变的东西,您可以使用枚举本身而不是字符串,比如
case Header.LimitType:
case Header.ValueType:
,etcI得到了。非常感谢。