我发现括号可用于开关标签,例如:
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可以包含括号:
常量表达式是表示原始类型或String的值的表达式,该值不会突然完成,并且仅使用以下内容组成:
...
综合表达式(§15.8.5),其所包含的表达式为常数表达式。
- ...
因此,由于case
后允许使用任何常量表达式(其类型为char,byte,short,int,Character,Byte,Short,Integer,String或enum类型),因此允许使用括号。
Switch语句断言所有嵌套的case语句将接收匹配的类型值case,即
如果您的案例中的id为
string
,那么案例中应该有字符串作为案例,并且您可以使用任何最终求值为字符串的表达式。
在您的情况下,case (CONSTANT||1):
语句将生成编译时错误,因为这不是有效的语句。