我正在研究 switch 表达式,我想我发现了一个奇怪的行为:
public static boolean isTimeToParty(Day day) {
switch (day) {
case MONDAY -> dog(); //expression allowed
case TUESDAY -> 2 + 2; //error: not a statement
case WEDNESDAY -> true; //error: not a statement
default -> System.out.println("");
}
return false;
}
public static int dog() {
return 2;
}
为什么我可以键入 as value dog()
这是一个表达式,但不允许其他类型的表达式? Intellij 提示我 "not a statement"
错误。
提前致谢。
最佳答案
根据语言规范,方法调用表达式也可以用作语句:
Certain kinds of expressions may be used as statements by following them with semicolons.
ExpressionStatement:
StatementExpression ;
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
倒数第二行表明方法调用表达式可以用作语句,这就是接受dog()
的原因。返回值被简单地丢弃。 2 + 2
不能用作语句。
关于java - 为什么 Switch 需要语句但接受表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69968184/