強化された Java の switch 文(Java 14以降)
Java 14以降、switch文は 表現力・可読性・安全性が大幅に向上しました。
従来のswitch文の課題
breakを忘れるとフォールスルー(次のcaseに処理が進む)
switchは「文(Statement)」であり、値を返せない
複数のcaseに共通処理を書くと冗長になる
例(従来):
switch (day) {
case "MON":
case "TUE":
System.out.println("Weekday");
break;
case "SAT":
case "SUN":
System.out.println("Weekend");
break;
}
強化されたswitch文の特徴
- switch式(Expression)
switchが式として使える(値を返せる)
-> を使ってシンプルに記述可能
String result = switch (day) {
case "MON", "TUE", "WED", "THU", "FRI" -> "Weekday";
case "SAT", "SUN" -> "Weekend";
default -> "Unknown";
};
または yield を使ってブロック形式もOK:
int dayOfWeek = switch (day) {
case "Sunday" -> 0;
case "Monday" -> 1;
default -> {
System.out.println("Unknown day");
yield -1;
}
};
- 複数のcaseをカンマでまとめられる
case "SAT", "SUN" -> "Weekend";
→ 複数の条件を1行でまとめて書ける!
- パターンマッチング(Java 17~)
型判定や条件分岐もcaseで直接書ける
switch (obj) {
case String s when s.length() > 5 -> System.out.println("長い文字列");
case Integer i -> System.out.println("整数: " + i);
default -> System.out.println("その他");
}
- その他の改良点
Enum型・Sealedクラスへの対応強化
nullやdefaultの柔軟な扱い
網羅性チェックの導入(抜け漏れを防止)