首页 > 解决方案 > 为什么 Switch 需要语句但接受表达式

问题描述

我正在研究 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;
}

为什么我可以键入作为dog()表达式的值,但不允许使用其他类型的表达式?Intellij 提示我"not a statement"错误。

提前致谢。

标签: javaswitch-statementconditional-statementsswitch-expression

解决方案


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

14.8. 表达式语句

某些类型的表达式可以通过在它们后面加上分号来用作语句。
表达式语句:
语句表达式;
StatementExpression:
赋值
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression

倒数第二行表示方法调用表达式可以用作语句,这就是dog()接受的原因。返回值被简单地丢弃。2 + 2不能用作陈述。


推荐阅读