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

问题描述 投票:0回答:1

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

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
1个回答
6
投票

与您的 enum 无关,但与您的 switch 语句有关,该语句在其 case 子句中需要常量。 case需要像

"helloWorld"
这样的常量表达式,表达式
Header.LimitType.getValue()
可能返回一个永远不会改变的值,但对于编译器来说它不是常量表达式。

© www.soinside.com 2019 - 2024. All rights reserved.