最近项目里升级了 JDK 17,顺手把 Java 最新的几个特性都用了一遍。以前写一堆模板代码的地方,现在几行就搞定了,开发效率确实提升了不少。
文本块(Text Blocks)让字符串更整洁
以前拼接 HTML 或 JSON 字符串时,各种引号和换行符看得人头疼。现在用三引号(""")直接定义多行文本,格式清晰多了。
String html = \"\"\
<div>
<p>你好,世界!</p>
</div>\
\"\"\";
像写配置文件或者 SQL 查询的时候,再也不用一行行加 + 号拼接了,维护起来也省心。
switch 表达式支持箭头语法
老版本的 switch 写法容易出错,还要记得写 break。现在可以直接返回值,逻辑更直观。
String dayType = switch (day) {
case "周一", "周二", "周三", "周四" -> "工作日";
case "周五" -> "快周末了";
case "周六", "周日" -> "休息日";
default -> "无效日期";
};
这种写法在处理用户状态、订单类型的时候特别顺手,代码读起来像自然语言。
记录类(Record)简化数据容器
以前写个 DTO 要写构造函数、getter、equals、hashCode,一通操作下来几十行。现在一个 record 关键字搞定。
record User(String name, int age) { }
// 使用
User user = new User("张三", 28);
像接口传参、数据库查询结果映射这类场景,record 真的是省时又省力。
模式匹配 instanceof 更干净
以前判断类型后还得强转,代码啰嗦。现在可以直接在条件中声明变量。
if (obj instanceof String str) {
System.out.println("字符串长度:" + str.length());
} else if (obj instanceof Integer num) {
System.out.println("数值是:" + num);
}
在处理多种消息类型、事件分发时,逻辑一下子清爽了。
密封类(Sealed Classes)控制继承关系
有些类你只想让特定的几个子类继承,比如表示支付方式的抽象类,只允许支付宝、微信、银行卡三种实现。
public sealed abstract class Payment permits Alipay, WeChatPay, BankCard {
}
public final class Alipay extends Payment { }
这样别人就不能随意扩展,API 设计较可控,团队协作也不怕被乱改。
JDK 更新越来越注重开发者体验,很多新特性都是为了解决实际编码中的痛点。如果你还在用老版本,不妨试试升级,说不定哪天写代码就突然觉得“咦,怎么变顺了”。