枚举与switch语句中的构造函数

时间:2015-04-29 20:03:26

标签: java enums core

这可能是一个愚蠢的问题,但我无法理解为什么它不起作用:

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

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

1 个答案:

答案 0 :(得分:6)

与您的枚举无关,而是使用开关语句,该语句需要 case 子句中的常量。 case 需要"helloWorld"等常量表达式,表达式Header.LimitType.getValue()可能返回一个永不改变的值,但它不是编译器的常量表达式。