[英]Why can't return be expressed in one line when using a Switch Expression?
while (true) {
console.mainMenu();
String inputCommand = console.input();
switch(inputCommand) {
case "exit" -> return;
case "create" -> {
Voucher voucher = createVoucher();
voucherRepository.save(voucher);
}
case "list" -> voucherRepository.findByIdAll();
default -> console.output(Error.INVALID_COMMAND);
}
}
case "exit" -> return;
在上面的代码中。
在switch表达式中,如果代码用单行表示,可以省略括号,但会继续要求加括号。
这是我得到的编译错误:
error: unexpected statement in case, expected is an expression,
a block or a throw statement case "exit" -> return;
为什么会出现问题?
如果我添加一个支架,效果很好。
但是我想知道为什么在删除括号时会出现错误?
您不能在switch expression中将语句用作规则(箭头->
之后的部分)。 它必须是表达式或块(可以包含一个语句或多个语句)
根据规范,这些是有效规则:
切换规则:
开关标签 ->表达式;
开关标签 ->块
开关标签 ->抛出语句
有效规则示例:
int a = 9;
switch(a) {
case 1 -> System.out.println(a); // Expression
case 2 -> {return;} // Block
default -> throw new IllegalArgumentException(); // ThrowStatement
}
这些是Oracle 教程中的表达式、语句和块的定义。
表达
表达式是由变量、运算符和方法调用组成的构造,它们根据语言的语法构造,计算结果为单个值。
陈述
语句大致相当于自然语言中的句子。 一条语句forms一个完整的执行单元。 下列类型的表达式可以通过以分号 (;) 结束表达式来组成语句。
堵塞
块是平衡括号之间的一组零个或多个语句
return;
不是变量或方法调用,而是语句。 因此,它必须包含在卷曲碱基中以形成代码块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.