JDK17-21特性Sealed类详解
Sealed类详解一、知识概述Sealed类密封类是Java 17正式引入的特性用于限制类的继承层次增强类型安全。1.1 Sealed类核心概念┌─────────────────────────────────────────────────────────────┐ │ Sealed类核心概念 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 关键字 │ │ - sealed 声明密封类/接口 │ │ - permits 指定允许继承的子类 │ │ - non-sealed 允许任意继承 │ │ - final 禁止继承 │ │ │ │ 特点 │ │ - 控制继承范围 │ │ - 编译时检查 │ │ - 配合模式匹配使用 │ │ │ └─────────────────────────────────────────────────────────────┘二、Sealed类使用2.1 基本语法// // Sealed类基本语法// publicsealedclassShapepermitsCircle,Rectangle,Triangle{// ...}publicfinalclassCircleextendsShape{privatefinaldoubleradius;}publicfinalclassRectangleextendsShape{privatefinaldoublewidth,height;}publicnon-sealedclassTriangleextendsShape{// 可以被任意继承}2.2 Sealed接口// // Sealed接口// publicsealedinterfaceServicepermitsOrderService,UserService{voidprocess();}publicfinalclassOrderServiceimplementsService{Overridepublicvoidprocess(){/* ... */}}publicfinalclassUserServiceimplementsService{Overridepublicvoidprocess(){/* ... */}}2.3 模式匹配增强// // Sealed类与模式匹配// publicdoublecalculateArea(Shapeshape){returnswitch(shape){caseCirclec-Math.PI*c.radius()*c.radius();caseRectangler-r.width()*r.height();caseTrianglet-0.5*t.base()*t.height();// 不需要default编译器知道所有子类};}三、总结Sealed类增强了Java的类型系统与模式匹配配合使用效果更佳。核心要点sealed声明密封类permits指定子类模式匹配穷举检查六、思考与练习思考题基础题sealed、non-sealed、final三种修饰符有什么区别分别在什么场景下使用进阶题Sealed类如何配合switch模式匹配实现编译期的穷尽性检查这种机制带来了哪些安全优势实战题在设计领域模型时什么情况下应该使用Sealed类而不是普通继承请举例说明。编程练习练习设计一个支付系统使用Sealed类实现支付方式类型层次定义sealed接口Paymentpermits CreditCard、DebitCard、Alipay、WeChatPay每种支付方式使用Record类实现包含必要的支付信息实现支付处理器使用switch模式匹配处理不同支付方式添加支付金额验证逻辑金额必须大于0要求使用Record实现具体的支付类型在switch中不需要default分支编译器保证穷尽实现支付状态枚举使用sealed interface章节关联前置章节Record类详解后续章节Virtual Threads详解扩展阅读代数数据类型ADT、访问者模式下一章预告下一章将深入探讨Java 21的Virtual Threads虚拟线程这是Project Loom的核心特性将彻底改变Java并发编程的方式。本章完