Integer i = ...
switch (i) {
case null:
doSomething0();
break;
}
上記のコードでは、switch case ステートメントで null を使用できません。これを別の方法で実行するにはどうすればよいですか? 使用できないdefault
ので、他の操作を実行したいのです。
ベストアンサー1
Java 18までは、Javaのステートメントではこれが不可能でした。の前にswitch
をチェックする必要がありました。しかし、今ではパターンマッチングにより、これは過去のものとなりました。null
switch
420 の:
パターンマッチングとヌル
従来、セレクター式が 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
(変数を使った例も含むnull
)Oracle ドキュメント - スイッチ