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

相关推荐
疯狂打码的少年4 分钟前
【数据结构】选择类排序:简单选择与堆排序
java·数据结构·笔记·算法
卷无止境20 分钟前
除了开发api,FastAPI其实也可以配合jinja2模板写页面
后端·python·fastapi
吴声子夜歌25 分钟前
Java面试——基础
java·开发语言·面试
newerp26 分钟前
Redis 操作与缓存策略
后端·程序员·go
newerp30 分钟前
GORM ORM 基础
后端·程序员·go
小岛前端35 分钟前
AI Skills 已经封神,但新的问题却越来越严重!
前端·后端·github
拖孩39 分钟前
一个人 + AI 做的小程序,上线 15 天赚了 10 块 5
前端·后端·微信小程序
newerp41 分钟前
CRUD 操作与预处理语句
后端·程序员·go
智码看视界1 小时前
Day 56:AI辅助开发全面提效:Copilot + Cursor的Java开发
java·单元测试·copilot·cursor·后端开发·代码审查·ai辅助开发
wei_shuo1 小时前
KES 数据同步与ETL实战:数据集成、转换与实时同步方案
后端