Java 21 新特性:记录类与模式匹配
·
Java 21 新特性:记录类与模式匹配
Java 21 引入了两项重要特性:记录类(Record Classes)和模式匹配(Pattern Matching),显著提升了代码的简洁性和表达力。以下是详细解析:
一、记录类(Record Classes)
记录类是一种透明数据载体,用于简化不可变数据模型的声明。其核心特性:
-
自动生成方法
编译器自动生成:- 全参数构造方法
equals()和hashCode()toString()- 组件访问器(如
name())
-
声明语法
使用record关键字定义:public record User(String name, int age) {} -
使用示例
User user = new User("Alice", 30); System.out.println(user.name()); // 输出 "Alice" System.out.println(user); // 输出 "User[name=Alice, age=30]" -
不可变性
所有字段均为final,禁止继承其他类(但可实现接口)。
二、模式匹配(Pattern Matching)
模式匹配通过解构数据简化类型检查和转换,主要应用于两个场景:
1. instanceof 模式匹配
- 传统方式
if (obj instanceof String) { String s = (String) obj; System.out.println(s.length()); } - Java 21 改进
直接绑定变量:if (obj instanceof String s) { System.out.println(s.length()); // 无需显式转换 }
2. switch 模式匹配
- 类型匹配
Object obj = ...; switch (obj) { case Integer i -> System.out.println("整数: " + i); case String s -> System.out.println("字符串长度: " + s.length()); case null -> System.out.println("空值"); default -> System.out.println("其他类型"); } - 记录类解构
结合记录类提取组件:record Point(int x, int y) {} Object obj = new Point(3, 4); switch (obj) { case Point(int x, int y) -> System.out.println("坐标: (" + x + ", " + y + ")"); default -> System.out.println("非坐标类型"); }
三、核心优势
- 减少样板代码
记录类消除getter/setter等重复代码。 - 增强类型安全
模式匹配在编译时检查类型完整性。 - 提升可读性
数据解构使逻辑更直观,例如:if (shape instanceof Circle c) { return $2 \pi r$ → $2 \times \pi \times c.radius()$; }
四、使用建议
- 记录类适用场景:DTO、配置项等纯数据载体
- 模式匹配适用场景:处理异构数据类型(如解析JSON/AST)
- 注意事项:记录类不可变,需确保组件类型本身不可变
通过这两项特性,Java 21 使开发者能更专注于业务逻辑,减少冗余代码,同时保持类型系统的严谨性。
更多推荐

所有评论(0)