一、Records(Java 16+) 📝
核心价值:简化不可变数据载体的定义
// 传统POJO vs Record
public record User(String name, int age) {}
// 自动生成:构造方法/equals()/hashCode()/toString()
User user = new User("Alice", 30);
System.out.println(user); // User[name=Alice, age=30]
🔑 特性亮点:
- 自动实现
final
类 +private final
字段 - 适合DTO、配置类等数据容器场景
- ⚠️ 不可继承/不可变特性
二、Pattern Matching(分阶段实现) 🧩
1. instanceof 模式匹配(Java 16+)
// 旧写法
if(obj instanceof String){
String s = (String) obj;
System.out.println(s.length());
}
// 新模式 ✅
if(obj instanceof String s){
System.out.println(s.length()); // 自动类型转换
}
2. Switch模式匹配(Java 21+)🔀
// 类型匹配 + null处理
String describe = switch(obj) {
case Integer i -> "整数: " + i;
case String s when s.length()>5 -> "长字符串";
case null -> "空对象";
default -> "未知类型";
};
三、Sealed Classes(Java 17+) 🔒
目标:精细化控制类继承关系
// 定义密封图形类
public sealed class Shape
permits Circle, Rectangle, Triangle {...}
// 子类必须声明为 final/sealed/non-sealed
public final class Circle extends Shape {...}
public non-sealed class Rectangle extends Shape {...}
🔍 关键规则:
permits
明确许可子类清单- 解除传统
final
的过度限制 - 完美配合模式匹配使用
🚀 综合实战Demo
// 定义密封类
sealed interface Animal permits Cat, Dog {}
record Cat(String name) implements Animal {}
record Dog(String breed) implements Animal {}
// 模式匹配处理
static void checkAnimal(Animal a) {
switch(a) {
case Cat c -> System.out.println("🐱: " + c.name());
case Dog d -> System.out.println("🐶: " + d.breed());
}
}
📌 版本升级建议
- Java 17 LTS:推荐新项目基线版本
- Java 21:虚拟线程等重磅特性加持
- 旧项目逐步采用模块化迁移策略