Значение перечисления не сравнивается с перечислением в переключателе - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть Enum с некоторыми именами в классе Constants:

static final enum NAMES {
    One,
    Two,
    Three,
    Four,
    Five
}

Я попытался просмотреть их с помощью:

 for (Constants.NAMES name in Constants.NAMES.values())

И затем использовать их в коммутаторе:

 switch (index.key) {
     case Constants.NAMES.One:

Я также пытался использовать One в качестве кейса и Enumset для цикла, единственное, что работает, - это использование "One" в качестве строки, но это противоречит цели Enum

Это работает:

    for (Constants.NAMES script : Constants.NAMES.values()) {
        switch (index.key) {
            case Constants.NAMES.ONE.name():

1 Ответ

0 голосов
/ 03 декабря 2018

Определите ваше перечисление, как показано ниже:

enum NAMES {
    ONE, TWO, THREE, FOUR, FIVE
}

static final являются незаконными модификаторами при использовании вместе с объявлением перечислений.Также убедитесь, что константы определены только в верхнем регистре.

Затем используйте его, используя:

public static void main(String[] args) {
    String myStr = "something";
    switch (NAMES.valueOf(myStr)) {

    case ONE:
        break;

    case TWO:
        break;

    // the rest 

    default:
        break;
    }

}

Альтернативно, вы можете создать статический метод для извлечения результата из enum

enum NAMES {
    ONE, TWO, THREE, FOUR, FIVE;

    public static NAMES fetchValue(String constant) {
        NAMES name = null;
        for (NAMES num : EnumSet.allOf(NAMES.class)) {
            if (num.name().equals(constant)) {
                name = NAMES.valueOf(constant);
            }
        }
        return name;
    }
}

И вызовите его, используя:

NAMES names = NAMES.fetchValue("ONE");

В этом подходе, даже если константа не найдена, код не сломается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...