在 case 语句中使用外部 ENUM 值

Using external ENUM values in case statement

我有一个 enum class:

public enum MessageEnum {
    HEADER,
    EXIT,
    LOGIN;
}

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

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

如何在 msgHeadercaseswitch 枚举? 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;

            }
}

问题是 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
     }
}