Java 17 中预览版switch支持null 以及 Object 为switch中的参数,相当于在case中使用了: xxx instance of 这样的语句。 由于Switch的一些功能在Java17中暂时只是预览,如果需要使用,那么在编译的时候就需要加上 --enable-preview 的参数,具体编译代码如下。 openjdk-17-ea+26_windows-x64_bin\jdk-17\bin>javac -...
在Java 11中,输出将显示NullPointerException发生的行号,但不知道哪个方法调用时产生的null,必须通过调试的方式找到。 Exception in thread "main" java.lang.NullPointerException at com.heiz.java17.HelpfulNullPointerExceptionsDemo.main(HelpfulNullPointerExceptionsDemo.java:13) 在Java 17中,则会准确显示发生NPE...
不仅如此,switch 表达式的参数 o 的类型也做了放宽,我们在后面介绍密封类的时候还可以看到对这一点的运用。 不仅如此,这次 switch 表达式还添加了对 null 的支持: 代码语言:javascript 复制 staticvoidtestFooBar(String s){switch(s){casenull->System.out.println("Oops");case"Foo","Bar"->System.out.print...
当switch 仅支持少数引用类型时,这是合理的。但是,如果 switch 允许任何类型的选择器表达式,并且 case 标签可以具有类型模式,那么独立的 null 测试感觉就像是任意区分,并且会带来不必要的样板文件和出错的机会。最好将空测试集成到开关中:static void testFooBar(String s) { switch (s) { case null -> System....
switch表达式 record关键字 sealed classes密封类 instanceof模式匹配 Helpful NullPointerExceptions 日期周期格式化 精简数字格式化支持 Stream.toList()简化 文本块 在Java17之前的版本里,如果我们需要定义一个字符串,比如一个JSON数据,基本都是如下方式定义: ...
我们在java 12和13中讨论过的任何switch语句和特性,都是预览特性,需要将flag -enable-preview设置为true。但是Java 14让所有的特性都不再是预览特性。标志-enable-preview在java 14启动时不需要设置。并且switch语句已经演变成switch表达式!#Java 17: Switch语句/表达式: ...
为什么把switch单独放最后讲,因为Java14-17分别对其做了增强,放在最后汇总起来讲更直观。 一共有三个改变: 1)、支持箭头语法; 2)、支持表达式; 3)、支持case null。 2)、案例 箭头语法,其实就是把旧写法中的冒号和break直接换成了箭头来代替,更简洁。
这是因为在Java中,当我们将null值作为switch语句的表达式时,它会抛出NullPointerException异常。这是因为在switch语句内部会自动调用表达式的hashCode()方法来进行比较,而null值是没有hashCode的。 为了解决这个问题,我们可以使用if-else语句来代替switch语句,如下所示: ...
[ERROR] /project/src/main/java/com/example/FooBar.java:[432,38] null in switch cases is a preview feature and is disabled by default. [ERROR] (use --enable-preview to enable null in switch cases) My Maven project has:<properties> <maven.compiler.release>17</maven.compiler.release> </...
The null-behavior of switch statements has changed with the addition of pattern matching, which arrived with JDK 21 (and has preview state in JDK 17-20) Switches and null Traditionally, switch statements and expressions throw NullPointerException if the selector expression evaluates to null, so ...