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

一、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:虚拟线程等重磅特性加持
  • 旧项目逐步采用模块化迁移策略
相关推荐
一勺菠萝丶2 分钟前
PDF24 转图片出现“中间横线”的根本原因与终极解决方案(DPI 原理详解)
java
姓蔡小朋友6 分钟前
Unsafe类
java
一只专注api接口开发的技术猿20 分钟前
如何处理淘宝 API 的请求限流与数据缓存策略
java·大数据·开发语言·数据库·spring
superman超哥21 分钟前
Rust 异步递归的解决方案
开发语言·后端·rust·编程语言·rust异步递归
荒诞硬汉21 分钟前
对象数组.
java·数据结构
期待のcode22 分钟前
Java虚拟机的非堆内存
java·开发语言·jvm
黎雁·泠崖23 分钟前
Java入门篇之吃透基础语法(二):变量全解析(进制+数据类型+键盘录入)
java·开发语言·intellij-idea·intellij idea
仙俊红26 分钟前
LeetCode484周赛T4
java