[英]Java: Can I fall through only one case in a switch statement
在 Java 中,我可以只通過switch
語句中的一種情況嗎? 我明白,如果我break
,我將失敗到switch
語句的末尾。
這就是我的意思。 給定以下代碼,在案例 2 上,我想執行案例 2 和案例 1。在案例 3 上,我想執行案例 3 和案例 1,但不執行案例 2。
switch(option) {
case 3: // code
// skip the next case, not break
case 2: // code
case 1: // code
}
不,使用switch
語句是不可能的。 您將通過每個case
直到您遇到break
。 也許您希望case 1
在您的switch
語句之外,以便它無論如何都會被執行。
將代碼放入方法中並適當調用。 按照你的例子:
void case1() {
// Whatever case 1 does
}
void case2() {
// Whatever case 2 does
}
void case3() {
// Whatever case 3 does
}
switch(option) {
case 3:
case3();
case1();
break;
case 2:
case2();
case1();
break;
case 1:
case1(); // You didn't specify what to do for case 1, so I assume you want case1()
break;
default:
// Always a good idea to have a default, just in case demons are summoned
}
當然, case3()
, case2()
... 是非常糟糕的方法名稱,您應該將其重命名為對方法實際執行的操作更有意義的名稱。
我的建議是,除了以下情況外,不要對任何事情使用 fallthrough:
switch (option) {
case 3:
doSomething();
break;
case 2:
case 1:
doSomeOtherThing();
break;
case 0:
// do nothing
break;
}
也就是說,為幾個案例提供完全相同的代碼塊來處理它們(通過“堆疊” case
標簽),使這里的流程或多或少變得顯而易見。 我懷疑大多數程序員會憑直覺檢查 case fall through(因為縮進使 case 看起來像一個適當的塊)或者可以有效地讀取依賴它的代碼 - 我知道我不知道。
switch(option)
{
case 3:
...
break;
case 2:
...
break;
}
... // code for case 1
如果要拆分案例,可以自定義條件
const { type, data } = valueNotifications
let convertType = ''
if (data?.type === 'LIVESTREAM' && type === 'NORMAL') {
convertType = 'LIVESTREAM1'
} else convertType = type
switch (convertType)
我的用例已將類型與值通知分開,但我有一個特定的 LiveStream 案例,它只顯示在 data.type 中是“LIVESTREAM”
也許像這樣的事情。
switch(option) {
case 3: // code
// skip the next case, not break
// BLOCK-3
case 2: // code
if(option == 3) break;
// BLOCK-2
case 1: // code
// BLOCK-1
}
在 switch 語句中,如果不break
,則執行后續 case。 給你簡單的例子
int value = 2;
switch(value) {
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
case 3:
System.out.println("three");
break;
}
會輸出
two
three
因為break
不會在 case 2 上執行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.