Java - поменяйте метку в скобках - PullRequest
0 голосов
/ 05 ноября 2019

Я обнаружил, что в метке коммутатора можно использовать скобки, например:

switch(id) {
  case (CONSTANT):
  case (1):
     // Do action
     break;
}

Но почему в этом случае Java допускает использование скобок, есть ли вариант использования? потому что я не могу использовать || или , для использования нескольких, например,

  case (CONSTANT||1):
  case (CONSTANT,1):

Так почему такой синтаксис разрешен, я не нашел в JLS :

SwitchLabel:

case ConstantExpression :

case EnumConstantName :

default :

EnumConstantName:

Identifier

Ответы [ 2 ]

4 голосов
/ 05 ноября 2019

Ну, а ConstantExpression может содержать круглые скобки:

Постоянное выражение - это выражение, обозначающее значение типа примитива или String, которое не завершается внезапно и составляется с использованиемтолько следующее:

  • ...

  • Выражения в скобках (§15.8.5), содержащее выражение которых является константным выражением.

  • ...

Следовательно, поскольку любое константное выражение (тип которого char, byte, short, int, Character, Byte, Short, Integer,Строка или тип перечисления) допускается после case, допускаются скобки.

1 голос
/ 05 ноября 2019

Регистр должен быть только константным выражением. Что-то в скобках может быть константным выражением.

private static final int TWO = 2;

public static void main(String[] args) {
    foo(3);
    foo(9);
}

private static void foo(int i) {
    switch (i) {
        case (TWO + 1):
            System.out.println("a");
            break;
        case (TWO + 1) * 3:
            System.out.println("b");
            break;
    }
}

CONSTANT || 1 не допускается, поскольку целые числа не являются допустимыми операндами ||.

Синтаксис запятых - это не вещь.

...