首页 > 解决方案 > Java - 带括号的开关标签

问题描述

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

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

标签: javaswitch-statementconstant-expression

解决方案


好吧,ConstantExpression可以包含括号:

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

  • ...

  • 带括号的表达式(第 15.8.5 节),其包含的表达式是常量表达式。

  • ...

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


推荐阅读