Использование внешних значений ENUM в выражении case

1

У меня есть класс 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;

            }
}
Теги:
enums

1 ответ

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
     }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню