Java-带括号的切换标签

问题描述 投票:0回答:2

我发现括号可用于开关标签,例如:

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
java switch-statement constant-expression
2个回答
2
投票

嗯,ConstantExpression可以包含括号:

常量表达式是表示原始类型或String的值的表达式,该值不会突然完成,并且仅使用以下内容组成:

  • ...

  • 综合表达式(§15.8.5),其所包含的表达式为常数表达式。

  • ...

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


-1
投票

Switch语句断言所有嵌套的case语句将接收匹配的类型值case,即

如果您的案例中的id为string,那么案例中应该有字符串作为案例,并且您可以使用任何最终求值为字符串的表达式。

在您的情况下,case (CONSTANT||1):语句将生成编译时错误,因为这不是有效的语句。

© www.soinside.com 2019 - 2024. All rights reserved.