JAVA新特性(六)switch优化
上一篇介绍了对instanceof的增强,这篇我简单介绍下switch语句的优化。
该优化在JDK 12中以预览版的形式发布。在JDK 13中,改进的switch表达式再次以预览版的形式发布。最后定版switch表达式在JDK 14正式发布。旧版switch存在什么问题?
主要是break语句的遗漏或者冗余是程序员经常出现的错误,甚至于被CWE组织单列成了一个常见软件安全漏洞[打脸]。我们来看个例子:public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY; } int numLetters = 0; Day day = Day.WEDNESDAY; switch (day) { case MONDAY: case FRIDAY: case SUNDAY: numLetters = 6; break; case TUESDAY: numLetters = 7; break; case THURSDAY: case SATURDAY: numLetters = 8; break; case WEDNESDAY: numLetters = 9; break; default: throw new IllegalStateException("Invalid day: " + day); } System.out.println(numLetters);
老练的java程序员比较容易写出以上正确的switch代码,这其中隐藏了一些坑:1.break关键字遗忘2.共用逻辑的case容易放错位置3.default分支经常遗忘
有些团队甚至禁止在代码中使用switch语句,这不得不说java原版switch设计很失败。新版switch带来了哪些改变?
我们直接看这个例子:Day day = Day.WEDNESDAY; System.out.println( switch (day) { case MONDAY, FRIDAY, SUNDAY -> { System.out.print(day); yield 6; }; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; default -> throw new IllegalStateException("Invalid day: " + day); } ); //case label_1, label_2, ..., label_n -> expression;|throw-statement;|block
这样的switch你爱了么,说说你的看法
下一篇:聊聊java模块化