java - 为什么 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"
错误。
提前致谢。
解决方案
根据语言规范,方法调用表达式也可以用作语句:
某些类型的表达式可以通过在它们后面加上分号来用作语句。
表达式语句:
语句表达式;
StatementExpression:
赋值
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
倒数第二行表示方法调用表达式可以用作语句,这就是dog()
接受的原因。返回值被简单地丢弃。2 + 2
不能用作陈述。
推荐阅读
- swift - 在 ios 应用程序中打开任何电子邮件附件
- amazon-web-services - AWS Amplify ci/cd 在测试阶段挂起
- python - 如何将熊猫系列的列值转换为Python中的列表?
- conditional-statements - 如何在火花流中删除其他结果?
- laravel - Laravel:调用自定义外观的问题
- java - 如何获取 TypeLiteral 绑定或可以说来自注入器的实例 [Google Guice]
- android-studio - 如何水平定义 RadioListTitles?
- javascript - 强制 Pixi.js WebGl 始终使用新的画布来解决在没有清除浏览器缓存的情况下重新加载页面后出现的错误
- powershell - 如何使用 PowerShell 关闭计算机?
- go - 预提交打印'golint:找不到命令'