繁体   English   中英

为什么在使用Switch Expression 时return 不能在一行中表达?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM