陷阱 - 在開關盒中缺少一個休息時間
這些 Java 問題可能非常令人尷尬,有時在生產中執行之前仍未被發現。switch 語句中的 fallthrough 行為通常很有用; 但是,如果不希望這種行為,則缺少 break
關鍵字會導致災難性後果。如果你忘記在下面的程式碼示例中的 case 0
中放置 break
,程式將寫入 Zero
後跟 One
,因為此處的控制流將通過整個 switch
語句直到它達到了休息。例如:
public static void switchCasePrimer() {
int caseIndex = 0;
switch (caseIndex) {
case 0:
System.out.println("Zero");
case 1:
System.out.println("One");
break;
case 2:
System.out.println("Two");
break;
default:
System.out.println("Default");
}
}
在大多數情況下,更乾淨的解決方案是使用介面並將具有特定行為的程式碼移動到單獨的實現中( 組合而不是繼承 )
如果 switch 語句不可避免,建議記錄預期的漏洞(如果發生)。通過這種方式,你可以向其他開發人員展示你知道丟失的中斷,並且這是預期的行為。
switch(caseIndex) {
[...]
case 2:
System.out.println("Two");
// fallthrough
default:
System.out.println("Default");