switchのパターンマッチング
if-elseのinstanceof連鎖をすっきりしたswitchの型パターンで置き換える。
コード比較
✕ Java 8
String format(Object obj) {
if (obj instanceof Integer i)
return "int: " + i;
else if (obj instanceof Double d)
return "double: " + d;
else if (obj instanceof String s)
return "str: " + s;
return "unknown";
}
✓ Java 21+
String format(Object obj) {
return switch (obj) {
case Integer i -> "int: " + i;
case Double d -> "double: " + d;
case String s -> "str: " + s;
default -> "unknown";
};
}
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
構造化されたディスパッチ
switchにより分岐構造が明示的で見やすくなります。
式形式
値を直接返せます — 可変変数は不要です。
網羅性
コンパイラがすべての型が処理されているか確認します。
旧来のアプローチ
if-elseの連鎖
モダンなアプローチ
型パターン
JDKバージョン
21
難易度
中級
JDKサポート
switchのパターンマッチング
利用可能
JDK 21 LTS(2023年9月)以降、広く利用可能
仕組み
switchのパターンマッチングにより、型に直接マッチングでき、型テスト、キャスト、バインディングを1つの簡潔なcaseラベルにまとめられます。コンパイラが網羅性を検証します。
関連ドキュメント