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