JDK17中的Sealed Classes

前言

Sealed Classes密封类,在JDK15已经开始预览,在JDK16做了第二次预览,到了JDK17转正

密封类

密封类可以理解为限制继承类,可以指定该类只能被某些子类继承,

语法类似如下: 类被 sealed 修饰,只允许(permits)类继承,继承的类必须有 final 或者 no-sealed 来修饰

密封类示例

1、定义一个密封类或者抽象密封类

kotlin 复制代码
public sealed class HelloService permits AClass, BClass, CClass {

    public String say() {
        return "say";
    }
}

这样写的话,就代表该密封类只能被AClass, BClass, CClass继承

scala 复制代码
public final class AClass extends HelloService {


    @Override
    public String say() {
        return "hello world";
    }
}
scala 复制代码
public final class BClass extends HelloService {


    @Override
    public String say() {
        return "hello world";
    }
}
scala 复制代码
public non-sealed class CClass extends HelloService {

    public String say() {
        return "say";
    }
}

继承的子类需要使用final修饰,表示不可再被继承,如果子类还需要被继承,那么就是用non-sealed修饰

3、抽象密封类

csharp 复制代码
public abstract sealed class HelloService2 permits DClass {

    abstract String say();
}
scala 复制代码
public final class DClass extends HelloService2 {
    @Override
    String say() {
        return "";
    }
}

总结

Sealed类,提供了一种机制来精确控制类的继承链,使得更好的编码,不过就是需要升级JDK版本,看个人使用

相关推荐
用户3721574261352 分钟前
Java 设置 Excel 数据验证:整数、日期、文本长度、下拉列表和时间
java
白远山24 分钟前
智慧场馆解决方案软件开发实战:从架构设计到落地部署指南
java·开发语言·架构·需求分析
SL_staff27 分钟前
面向业务人员的IoT概念翻译实践:JVS-IOT低代码配置原理与开发者视角解析
java·spring boot·物联网
m0_5873830039 分钟前
折扣卡CPS软件开发实战:从系统架构设计到上线指南
java·小程序·架构·需求分析
LEE40 分钟前
前端转型全栈 00:AI 时代该学哪些,不该学哪些
前端·后端
Go_error44 分钟前
上下文取消链:摧毁我们支付系统的 bug
后端·go
无限压榨切图仔1 小时前
一个优惠券需求改了三端,我才明白全栈不是多学一门语言
前端·后端
CRZZX1 小时前
阶段 0.1:为 AI Agent 项目建立敏感配置治理与安全基线
后端
Zane19941 小时前
用了Optional,为什么NPE还是防不住?
java·后端
yunwei371 小时前
eBPF 示例教程:实现 `scx_nest` 调度器
linux·后端·性能优化