如何在switch中使用null

新手上路,请多包涵
Integer i = ...

switch (i) {
    case null:
        doSomething0();
        break;
}

在上面的代码中,我不能在 switch case 语句中使用 null。我怎样才能做到这一点?我不能使用 default 因为那时我想做其他事情。

原文由 hudi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

在 Java 18 之前,Java 中的 switch 语句是不可能的。您必须在 null 之前检查 switch 。但现在,有了模式匹配,这已成为过去。看看 JEP 420

模式匹配和 null

传统上,如果选择器表达式的计算结果为 null,则 switch 语句和表达式会抛出 NullPointerException,因此必须在 switch 之外进行 null 测试:

 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 测试感觉就像是任意区分,并且会带来不必要的样板文件和出错的机会。最好将空测试集成到开关中:

 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 (包括带有空变量的示例)在 Oracle Docs - Switch

原文由 Jesper 发布,翻译遵循 CC BY-SA 4.0 许可协议

switch ((i != null) ? i : DEFAULT_VALUE) {
        //...
}

原文由 tetsuo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题