在 Java 21 的最新版本中,记录类(record)与模式匹配(pattern matching)得到了显著扩展和改进。下面我们从两个方面详细介绍这些新特性,并提供实际代码示例,帮助你快速上手。
1. 记录类(Record)的新功能
1.1 记录类的增强语法
- 默认成员方法的重写:在 Java 21 中,记录类默认实现
equals()、hashCode()、toString()的方式已经改进,支持更高效的字节码生成,减少了对象实例化时的开销。 - 记录类的可变字段:通过
var和record的组合,允许在记录类中声明可变字段,从而兼顾不可变性与可变性需求。
public record User(var String name, var int age) {}
1.2 记录类的序列化
- 自动支持 Jackson:Java 21 开始将
record与 Jackson 框架更紧密地集成,默认使用RecordDeserializer,无需额外配置即可序列化/反序列化。 - Serializable 接口:记录类现在可以直接实现
Serializable接口,简化了旧版 Java 代码中对record的持久化需求。
public record Order(String id, double amount) implements Serializable {}
2. 模式匹配(Pattern Matching)的新进展
2.1 对 switch 语句的支持
Java 21 引入了对 switch 语句的模式匹配改进。你可以直接在 switch 里使用类型模式、记录模式和组合模式:
String result = switch (obj) {
case null -> "空";
case Integer i -> "整数: " + i;
case String s && s.length() > 5 -> "长字符串: " + s;
case Person(String name, int age) -> "姓名: " + name + ", 年龄: " + age;
default -> "其他";
};
2.2 对 instanceof 的改进
- 模式变量的显式类型:在
instanceof之后直接声明变量类型,避免了重复类型检查。 - 复合模式:支持
&&与||组合,让复杂的类型判断变得更简洁。
if (obj instanceof Integer i && i > 10) {
System.out.println("大于10的整数: " + i);
}
3. 如何在项目中使用这些新特性?
3.1 更新 JDK 版本
确保你使用的 JDK 至少为 21,Maven 或 Gradle 项目可以通过以下方式更新:
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
或
java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
3.2 配置 Jackson 依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.18.0</version>
</dependency>
3.3 示例:记录类 + 模式匹配
public record Event(String type, Object data) {}
public class EventProcessor {
public void process(Event event) {
switch (event) {
case Event("USER_CREATED", User(String name, int age)) -> {
System.out.println("新用户: " + name + " (" + age + "岁)");
}
case Event("ORDER_PLACED", Order(String id, double amount)) -> {
System.out.println("新订单: " + id + ",金额: " + amount);
}
default -> System.out.println("未知事件");
}
}
}
4. 小结
Java 21 对记录类和模式匹配的升级,极大地提升了代码的可读性与安全性。通过更直观的语法、内置的序列化支持以及更强大的 switch 与 instanceof,开发者可以用更少的代码完成更复杂的业务逻辑。赶快升级到 JDK 21,体验这些新特性吧!
