03.06 Java 14 即将发布,正式加入新的 Switch 表达式

依照 6 个月的发布周期,甲骨文预计在 3 月 17 日时推出 Java 14,这个版本有三个主要的更新,第一个便是在 Java 12 新增的预览功能 Switch 表达式,在 Java 14 中成熟成为正式功能,第二个则是新增的语言功能,为 instanceof 增加模式配对,第三个则是 JVM 的功能,提供有用的 NullPointerExceptions 信息。

Java 14 即将发布,正式加入新的 Switch 表达式

由于 Java 旧的 Switch 表达式有几个问题,因此官方在 Java 12 的时候,加入新的 Switch 表达式语法预览版,要让 Switch 更好用。Switch 表达式语法包含 case 以及 break 陈述式,条件配对由上往下执行,一旦进到特定 case 中,break 陈述式会确保下一个 case 区块不会被执行,但是当开发者忘记写 break,执行流程会继续往下走,直到碰到下一个 break,这个现象被称为穿透(Fall-through)。

而在新的 Switch 表达式中,使用了新的语法来避免穿透发生的可能性,因此能够降低可能产生臭虫的机率。新的 Switch 格式使用 Lambda 风格的语法,该语法由标签和回传值代码间的箭头组成,但官方强调,这个并非真正的 Lambda 表达式,只是类似而已。

Java 14 即将发布,正式加入新的 Switch 表达式

Java 12 之前,Switch 表达式中每一个 case 只能使用一个标签,因此尽管不同标签的处理逻辑相同,仍需要分开写成两个 case 区块,或是故意利用穿透现象来达成目的,但是故意使用穿透可能会造成误解,因为在部分情况会难以判断缺少 break 陈述式是故意的还是无意的。而在新的 Switch 表达式中,现在可以在 case 使用多个标签处理这样的情况。

官方表示,新的 Switch 表达式也更加详尽安全,当开发者在 Switch 中使用 enum 时,编译器会检查 case 是否列举所有 enum 中的值,当创建的 switch 没有涵盖所有的值,则会出现编译器错误,这个错误可以提醒开发者处理遗漏的情况。

另外,Switch 在 Java 12 之前只是一个陈述式,而现在则可做为一个表达式使用。官方提到,陈述式的本质是动作,而表达式的本质则是请求产生一个值,表达式越基本容易理解,也会使得代码更容易维护。而现在开发者可以把 switch 撰写成简洁的表达式,以更好的表明代码的意图。

Java 14 为 instanceof 加入模式配对,这个功能可减少有条件 instanceof 检查,进行强制转换的需要。模式配对是让开发者能够测试值的样子,并在符合特定规则的时候取出信息,在测试参数以确定其类型时,会经过转换,并宣告区域变数,以便后续利用特定类型进行处理。

这个新的语言功能,则是让开发者从物件中有条件的取出元件变得简单,使语法更加简单可读,官方表示,这个预览功能为广泛的模式配对开了一个门,模式配对的中心思想,就是要提供一个功能,可以简单地根据条件,从物件中取出元件,而 instanceof 运算子就是这样的功能。

Java 14 即将发布,正式加入新的 Switch 表达式

Java 14 即将发布,正式加入新的 Switch 表达式

Java 14 加入新的 JVM 功能,让开发者可以获取更多可用于诊断错误的信息,在 Java 14 之前, NullPointerException 信息含糊不清,无法明确的让开发者知道程序问题所在。而现在,信息至少会包含问题发生的位置和原因两类信息。这项功能不止可用于方法调用,还可用于其他可能导致 NullPointerException 的地方,包括栏位存取、阵列存取和赋值。


分享到:


相關文章: