Java - 带括号的开关标签

Java - Switch Label with parentheses

我发现括号可以用在开关标签中,例如:

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

嗯,ConstantExpression 可以包含括号:

A constant expression is an expression denoting a value of primitive type or a String that does not complete abruptly and is composed using only the following:

  • ...

  • Parenthesized expressions (§15.8.5) whose contained expression is a constant expression.

  • ...

因此,由于在case之后允许任何常量表达式(其类型为char、byte、short、int、Character、Byte、Short、Integer、String或枚举类型),因此允许使用括号.

大小写只要是常量表达式即可。括号中的内容可能是常量表达式。

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 是不允许的,因为整数不是 || 的有效操作数。

逗号语法不是问题。