值得关注的 JDK 12 新功能。
卡在Java8了 :(
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
随着 Java 新的 6 个月发布周期,开发者们将能更快地体验到各种炫酷功能。我已经看到一些很棒的新功能,预计它们将在明年发布的 JDK 12 中亮相。您可以获取 OpenJDK 12 的早期访问版本,并体验这些预览功能。
切换表达式
例如,假设你有一个表示星期几的枚举类型,你想用 switch 语句返回字符串中的字母数量。虽然有更好的方法,但为了演示,我们将使用 switch 语句。
以下是枚举值:
enum DayOfWeek{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
以我们对 Java 的了解,这可能是解决方案:
int numLetters;
switch(day){
case MONDAY: case FRIDAY: case SUNDAY:
numLetters=6;
break;
case TUESDAY:
numLetters=7;
break;
case THURSDAY: case SATURDAY:
numLetters=9;
break;
case WEDNESDAY:
numLetters=10;
break;
default:
throw new NoSuchDayException(day);
}
这可能会引发一些 bug,因为这会使代码难以维护。
使用 Switch 表达式,您可以将 Switch 语句编写成表达式。Switch 语句中不需要默认值。
以下是代码示例:
int numLetters=switch(day)
{
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
记录
我们都知道 POJO(Plain Old Java Object,普通 Java 对象),它们包含大量样板代码,例如,以下是一个典型的 POJO:
class Point {
double x;
double y;
Point(double x, double y) {
this.x = x;
this.y = y;
}
public void setX(double x) {
this.x = x;
}
public double getX() {
return x;
}
public void setY(double y) {
this.y = y;
}
public double getY() {
return y;
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
public String toString() {
return super.toString();
}
}
Records (截至撰写本文时,尚未针对 JDK 12)用一行代码替换了所有 POJO 代码:
record Point(double x, double y);
JDK 12 及更高版本还有其他很棒的功能值得期待,我个人很欣赏 Java 社区的积极响应和推动 Java 向前发展的努力。
如果您想了解更多,可以观看这个视频: