java - 为什么 Switch 需要语句但接受表达式

标签 java switch-statement conditional-statements switch-expression

我正在研究 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" 错误。

提前致谢。

最佳答案

根据语言规范,方法调用表达式也可以用作语句:

14.8. Expression Statements

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/

相关文章:

java - 比较 epoch 毫秒和 LocalDateTime 之间的 java 时间

perl - perl 中的案例语句 : not able to enter proper case

c# - 局部变量 - switch case

javascript fizzbuzz 开关语句

python - 简单的原始输入和条件

conditional-statements - gnuplot,如何仅标记某些点?

python - "If not"python中的条件语句

java - 如何从 main 方法将对象添加到数组中?另外,如何在 main 方法中制作菜单?

java - 如何根据 JSON 对象的字段值创建特定 Java 类的对象?

java - 我应该在 JComboBox 中使用枚举还是字符串