簡體   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