スイッチでnullを使用する方法 質問する

スイッチでnullを使用する方法 質問する
Integer i = ...
    
switch (i) {
    case null:
        doSomething0();
        break;    
}

上記のコードでは、switch case ステートメントで null を使用できません。これを別の方法で実行するにはどうすればよいですか? 使用できないdefaultので、他の操作を実行したいのです。

ベストアンサー1

Java 18までは、Javaのステートメントではこれが不可能でした。の前にswitchをチェックする必要がありました。しかし、今ではパターンマッチングにより、これは過去のものとなりました。nullswitch420 の:

パターンマッチングとヌル

従来、セレクター式が null と評価された場合、switch ステートメントと式は NullPointerException をスローするため、null のテストは switch の外部で行う必要があります。

static void testFooBar(String s) {
     if (s == null) {
         System.out.println("oops!");
         return;
     }
     switch (s) {
         case "Foo", "Bar" -> System.out.println("Great");
         default           -> System.out.println("Ok");
     }
 }

これは、switch が少数の参照型しかサポートしていなかったときには妥当でした。しかし、switch が任意の型のセレクター式を許可し、case ラベルが型パターンを持つことができる場合、スタンドアロンの null テストは恣意的な区別のように感じられ、不必要な定型句とエラーの機会を招きます。null テストを switch に統合する方がよいでしょう。

static void testFooBar(String s) {
    switch (s) {
        case null         -> System.out.println("Oops");
        case "Foo", "Bar" -> System.out.println("Great");
        default           -> System.out.println("Ok");   
  }
}

詳細はswitch(変数を使った例も含むnullOracle ドキュメント - スイッチ

おすすめ記事