现在的Java版本号刷的和Chrome一样快,在最新的14版本中加入了switch表达式,和以前使用的switch语句不同,switch表达式带来的不仅仅是编码上的流畅,同时精简了switch语句的使用方式,并且是兼容以前的switch语句。
以前的switch语句在分支结束的时候往往需要我们手动的进行break,否则switch会一直进行下去直到switch语句结束,这很容易造成一些难以排查的bug。switch语句使用冒号来作为分支代码块的的开始,而switch表达式提供了新的流程切换方式: ->
符号右边的代码执行完成之后会自动结束整个switch语句。 ->
右边可以是表达式,代码块或是抛出异常。
由于变成了表达式,现在switch可以用来进行赋值,比如:
int numLetters = switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; };
虽然switch表达式的出现在一些流程分支上简化了不少编码,但是需要注意以下几点:
上面的要点提到了 yield
,它并不是一个关键字,和 var
一样,都是被严格限制了的类型名。 yield
可理解为让,或者是返回。
yield语句
上面的switch表达式是比较简单的yield语句,看下面的代码:
int j = switch (day) { case MONDAY -> 0; case TUESDAY -> 1; default -> { int k = day.toString().length(); int result = f(k); yield result; } };
因为switch表达式是兼容以前的switch语句,所以也可以这么写:
int result = switch (s) { case "Foo": yield 1; case "Bar": yield 2; default: System.out.println("Neither Foo nor Bar, hmmm..."); yield 0; };
查看使用switch表达式和switch语句所得到的class文件,发现基本一样,说明switch表达式的实现仍然是Java的语法糖,都是编译器在编译的时候进行处理的。
switch表达式的出现可以看到Java在提高使用者编码效率上还是在不停的努力,期待可以看到更多的新特性来提升编码效率和体验。
版权所有丨转载请注明出处:https://minei.me/archives/541.html