Почему я не могу использовать перечисления для операторов switch-case? - PullRequest
3 голосов
/ 28 марта 2020

Я хочу использовать enum-константы для операторов switch-case.

Я использую следующие enum / class:

public enum Cons {

  ONE(1), 
  TWO(2);

  private final int val;

  private Cons(final int newVal) {
    val = newVal;
  }

  public int getVal() {
    return val;
  }
}



public class Main {

  public static void main(String[] args) {

    int test;

    // some code

    switch(test) {
        case Cons.ONE.getVal():
            // ...
            break;
        case Cons.TWO.getVal(): 
            // ...
            break;
        default:
            // ...
    }
  }
}

Проблема: "выражение case должно быть константным выражением " => значения моего перечисления не являются константами, хотя атрибут private final int val объявлен как final.

Как я могу использовать это перечисление для операторов case?

1 Ответ

4 голосов
/ 28 марта 2020

Метки дел должны быть выражениями констант времени. Вызов метода не является одним из них.

Что вы можете сделать, так это изменить тест на Cons. Затем вы можете использовать его в switch:

Cons test;

// some code

switch(test) {
    case Cons.ONE:
        // ...
        break;
    case Cons.TWO: 
        // ...
        break;
    default:
        // ...
}

Если вам нужно работать с int, создайте метод, который возвращает правильный экземпляр перечисления, используя значение.

Cons lookUpByVal(int test) { ... }

switch(lookUpByVal(test)) {
     case Cons.ONE:
     ...
...