String s = switch (e) { case 0 -> break “foofoo”; case 1: if (p == 0) break x; else { String z = hairy(x); break z+z; } case 2 -> “barbar”; };
Now I decide that case 1 has three subcases. So I change the `if` to a statement `switch`. String s = switch (e) { case 0 -> break “foofoo”; case 1: switch (p) { case 0: break x; case 1: break x+x; default: String z = hairy(x); break z+z; } case 2 -> “barbar”; }; FAIL. One can argue that I should have done something else, such as use a three-way if-then-else: String s = switch (e) { case 0 -> break “foofoo”; case 1: if (p == 0) break x; else if (p == 1) break x+x; else { String z = hairy(x); break z+z; } case 2 -> “barbar”; }; or use a switch expression rather than a statement switch: String s = switch (e) { case 0 -> break “foofoo”; case 1 -> switch (p) { case 0 -> x; case 1 -> x+x; default: String z = hairy(x); break z+z; } case 2 -> “barbar”; }; All I’m doing is demonstrating that a common refactoring pattern “turn the `if` statement into a `switch` statement” has more pitfalls than it used to once we introduce `switch` expressions. —Guy