陷阱 - 在开关盒中缺少一个休息时间
这些 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");