You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 17中sealed(密封)类是什么?有哪些作用?

Java sealed类的实际作用

sealed类的核心设计目标是精确控制类或接口的继承/实现范围,解决了传统Java继承控制粒度过粗的问题,实际使用场景和价值主要有以下几点:

  • 替代旧的不严谨的继承限制方案
    之前要限制类被继承只有两种极端方案:用final修饰类,彻底禁止任何继承;或者把类构造器设为私有,仅允许同包下的类继承。sealed类可以通过permits关键字显式列出允许继承该类的所有子类,仅列表内的类有权限继承,控制粒度更灵活精准,你给出的示例就是最典型的声明方式:
    public sealed class Main permits AClass, AnotherClass {
    }
    
  • 提升模式匹配的安全性
    配合Java后续推出的switch模式匹配特性,当分支判断的变量是sealed类实例时,编译器可以提前穷举所有合法的子类类型,只要你覆盖了所有子类的处理分支,就不需要写default兜底,漏写某个子类分支时编译器会直接报错,避免运行时漏判的逻辑bug。
  • 固定领域模型的类型层次
    开发业务系统时,很多领域的类型数量是固定的,比如支付方式只支持微信支付、支付宝支付、银行卡支付三种,就可以把父类Payment声明为sealed类,仅允许这三个对应的子类继承,后续维护代码的人员无法随意新增其他支付子类,避免破坏原有领域模型的设计约束。

另外你提到的版本信息是正确的:sealed类在JDK 15首次作为预览特性推出,JDK 16进行第二次预览,到JDK 17正式成为Java标准特性,生产环境使用不需要额外开启预览参数。
补充一个使用注意点:继承sealed类的子类必须显式声明三种修饰符之一:final(禁止该子类再被继承)、sealed(该子类同样是密封类,继续指定自己允许的继承列表)、non-sealed(放开继承限制,允许任意类继承该子类)。


内容的提问来源于stack exchange,提问作者user16411474

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:15:05