在case语句中使用外部ENUM值

时间:2015-03-19 20:32:42

标签: java enums

我有一个enum课程:

public enum MessageEnum {
    HEADER,
    EXIT,
    LOGIN;
}

我收到来自其他应用的String消息:

String msgHeader;
...
msgHeader = msgIn.get(MessageEnum.HEADER.toString()).asText();

我如何在switchmsgHeadercase获取枚举? Java说: case expressions must be constant expressions

while (msgHeader != MessageEnum.EXIT.toString()) {

            switch (msgHeader) {

            case MessageEnum.LOGIN.toString(): //Error in this line
                break;

            default:
                break;

            }
}

1 个答案:

答案 0 :(得分:1)

问题是MessageEnum.LOGIN.toString()将在运行时进行评估,而switch-case期望在编译时知道cases的值。所以,那是行不通的。要么使用硬编码字符串 - "LOGIN""HEADER"

另一种方法是将msgHeader字符串转换为相应的枚举常量:

MessageEnum msgEnum = MessageEnum.valueOf(msgHeader);

然后switch关于该值:

while (msgEnum != MessageEnum.EXIT) {
     switch(msgEnum) {
     case LOGIN:   // action
     case HEADER:  // action
     }
}