【Java学習|初心者向け】Java 21以降でさらに便利に!switch式におけるnullとdefaultの同時処理

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バージョンが古い場合は利用できないため、プロジェクトのビルド設定を確認してください。

効率的なコードを書くことは、バグを減らす第一歩です。ぜひ新しい構文を積極的に試してみてください。

コメント

タイトルとURLをコピーしました