我有一个enum
课程:
public enum MessageEnum {
HEADER,
EXIT,
LOGIN;
}
我收到来自其他应用的String
消息:
String msgHeader;
...
msgHeader = msgIn.get(MessageEnum.HEADER.toString()).asText();
我如何在switch
和msgHeader
上case
获取枚举? 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;
}
}
答案 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
}
}