Java 语法新特性(Records、Pattern Matching、Sealed Classes)深度解析(11/17/21)✨

一、Records(Java 16+) 📝

核心价值:简化不可变数据载体的定义

  1. // 传统POJO vs Record
  2. public record User(String name, int age) {}
  3. // 自动生成:构造方法/equals()/hashCode()/toString()
  4. User user = new User("Alice", 30);
  5. System.out.println(user); // User[name=Alice, age=30]

🔑 特性亮点:

  • 自动实现final类 + private final字段
  • 适合DTO、配置类等数据容器场景
  • ⚠️ 不可继承/不可变特性

二、Pattern Matching(分阶段实现) 🧩
1. instanceof 模式匹配(Java 16+)

  1. // 旧写法
  2. if(obj instanceof String){
  3. String s = (String) obj;
  4. System.out.println(s.length());
  5. }
  6. // 新模式 ✅
  7. if(obj instanceof String s){
  8. System.out.println(s.length()); // 自动类型转换
  9. }

2. Switch模式匹配(Java 21+)🔀

  1. // 类型匹配 + null处理
  2. String describe = switch(obj) {
  3. case Integer i -> "整数: " + i;
  4. case String s when s.length()>5 -> "长字符串";
  5. case null -> "空对象";
  6. default -> "未知类型";
  7. };

三、Sealed Classes(Java 17+) 🔒

目标:精细化控制类继承关系

  1. // 定义密封图形类
  2. public sealed class Shape
  3. permits Circle, Rectangle, Triangle {...}
  4. // 子类必须声明为 final/sealed/non-sealed
  5. public final class Circle extends Shape {...}
  6. public non-sealed class Rectangle extends Shape {...}

🔍 关键规则:

  • permits明确许可子类清单
  • 解除传统final的过度限制
  • 完美配合模式匹配使用

🚀 综合实战Demo

  1. // 定义密封类
  2. sealed interface Animal permits Cat, Dog {}
  3. record Cat(String name) implements Animal {}
  4. record Dog(String breed) implements Animal {}
  5. // 模式匹配处理
  6. static void checkAnimal(Animal a) {
  7. switch(a) {
  8. case Cat c -> System.out.println("🐱: " + c.name());
  9. case Dog d -> System.out.println("🐶: " + d.breed());
  10. }
  11. }

📌 版本升级建议

  • Java 17 LTS:推荐新项目基线版本
  • Java 21:虚拟线程等重磅特性加持
  • 旧项目逐步采用模块化迁移策略
大数据

git基本用法(git的基本用法)

2025-3-1 23:12:16

大数据

git常用命令大全(git 常见命令)

2025-3-1 23:12:19

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧