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