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版本,看个人使用

相关推荐
花间相见21 分钟前
【Java基础面试题】—— 核心知识点面试题(含答案):语法+集合+JVM+设计模式+算法
java·jvm·设计模式
钟智强25 分钟前
从2.7GB到481MB:我的Docker Compose优化实战,以及为什么不能全信AI
后端·docker
会飞De琥珀27 分钟前
java工具类,字符串转时间
java·开发语言
曹牧1 小时前
JSON 数组的正确使用方式
java·服务器·前端
LINgZone21 小时前
深入解析:Cglib与JDK动态代理的实现原理、区别及性能对比
java·开发语言
华科易迅1 小时前
Spring JDBC
java·后端·spring
云烟成雨TD1 小时前
Spring AI 1.x 系列【17】函数型工具开发与使用
java·人工智能·spring
小村儿1 小时前
一起吃透 Claude Code,告别 AI 编程迷茫
前端·后端·ai编程
程序员大飞哥1 小时前
云控SLA的数学:250ms端到端延迟预算怎么分配给传输层
后端
云烟成雨TD2 小时前
Spring AI 1.x 系列【15】AI Agent 基石:Tool Calling 标准与 Spring AI 集成
java·人工智能·spring