1. 導入:なぜこの構文が重要なのか
Javaのswitch文やswitch式は、以前はnullを扱うことができず、事前にnullチェックが必要でした。しかし、Java 21で正式導入された「パターンマッチング」により、switch内で直接nullを扱えるようになりました。特に「case null, default:」と記述することで、null値とその他の値をひとまとめに処理できるようになり、コードの重複を減らし、より安全で読みやすいプログラムが書けるようになりました。
2. 基礎知識:switch式とパターンマッチング
Java 14以降、従来のswitch文をより強力にした「switch式」が利用可能です。switch式は値を直接返すことができるため、変数への代入がスムーズになります。
今回解説する「case null, default:」は、複数のラベルをカンマで区切る「コンマ区切りラベル」という機能です。これにより、「nullの場合」と「それ以外(default)」という、網羅的な処理を一行で簡潔に記述できるようになりました。
3. 実装と解決策
従来は、switchに渡す前にnullチェックを行い、例外を投げるか特定の値を返す必要がありました。新しい構文を使えば、switchの中で「nullが来ても例外が発生せず、適切に処理する」という設計が可能です。特に、列挙型(enum)やシールドクラス(sealed class)と組み合わせることで、型の網羅性を担保しつつ、安全に値を処理できます。
4. サンプルプログラム
以下のコードは、入力された文字列の長さに基づいてメッセージを返す例です。nullが入力されてもエラーにならず、defaultと同じ処理が行われます。
public class SwitchExample {
public static void main(String[] args) {
String input = null;
// switch式を使ってnullとその他のケースを処理する
String result = switch (input) {
case "Java" -> "プログラミング言語です";
case "Python" -> "スクリプト言語です";
// nullとdefaultを同時に指定して、どちらも「不明」として扱う
case null, default -> "不明なデータ、またはnullです";
};
System.out.println("結果: " + result);
}
}
5. 応用・注意点
この機能を使う際の注意点がいくつかあります。
・網羅性の確認
Javaのswitch式は「すべてのパターンを網羅していること」がコンパイルの条件です。defaultを記述したり、sealedクラスの全パターンを網羅したりしないと、コンパイルエラーになります。
・nullの扱いには意味を持たせる
「case null, default:」とまとめると、nullが来たのか、それ以外の予期せぬ値が来たのかを区別できなくなります。もしnullの時だけ特別な処理(例えば「空のリストを返す」など)をしたい場合は、nullを独立したcaseとして記述するのが現場でのベストプラクティスです。
・古いバージョンでの動作
この機能はJava 21以降の機能です。開発環境のJDKバージョンが古い場合は利用できないため、プロジェクトのビルド設定を確認してください。
効率的なコードを書くことは、バグを減らす第一歩です。ぜひ新しい構文を積極的に試してみてください。

コメント