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

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

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

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

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注