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
是不允许的,因为整数不是 ||
的有效操作数。
逗号语法不是问题。
我发现括号可以用在开关标签中,例如:
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
是不允许的,因为整数不是 ||
的有效操作数。
逗号语法不是问题。