高版本 Java 中 `switch` 表达式对于 `null` 值的处理
switch
表达式语法在 Java 14 被引入, 随后 switch
表达式对 null
值的支持在 Java 17 被引入.
在老版本 Java 中对于这样的代码:
enum TestEnum
{
A, B, C, D;
}
TestEnum any = ...;
if(any != null)
{
switch (any)
{
case A:
{
System.out.println("case A");
break;
}
case B:
{
System.out.println("case B");
break;
}
default:
{
System.out.println("case C or D");
break;
}
}
}
else // 原始 switch 语句不支持传入 null, 需要专门做处理
{
System.out.println("case null");
}
`
可以被简化为:
switch (any)
{
case A -> System.out.println("case A");
case B -> System.out.println("case B");
case null -> System.out.println("case null");
default -> System.out.println("case C or D");
}
需要注意的是, 如果已知传入值可能为 null
, 那么 case null
分支就 不可省略. 因为即使是写了 default
分支, 在没有写 case null
分支的时候, 向这个 switch
语句传入 null
值还是会引发 NullPointerException
.