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

相关推荐
IT_陈寒1 分钟前
Vite静态资源加载把我坑惨了
前端·人工智能·后端
2601_949814692 分钟前
Spring Boot中的404错误:原因、影响及处理策略
java·spring boot·后端
RDCJM3 分钟前
Spring Boot spring.factories文件详细说明
spring boot·后端·spring
小码哥_常5 分钟前
从ORDER BY RAND()踩坑,看透SQL性能优化
后端
remember_me28 分钟前
LangGraph 使用指南
后端
ILYT NCTR28 分钟前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang
小雅痞35 分钟前
[Java][Leetcode simple] 28. 找出字符串中第一个匹配项的下标
java·开发语言·leetcode
likerhood40 分钟前
java中的不可变类(Immutable)
java·开发语言
花椒技术42 分钟前
从区间锁到行锁:一次高并发写入死锁治理实战
后端·sql
随风,奔跑1 小时前
Spring Cloud Alibaba(四)---Spring Cloud Gateway
后端·spring·gateway