У меня есть класс 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;
}
}
Проблема в том, что 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
}
}