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

相关推荐
devilnumber3 小时前
Java 递归算法 详解 + 核心要点 + 实战运用 + 避坑指南
java·开发语言·算法
独泪了无痕4 小时前
MyBatis魔法堂:结果集映射
后端·mybatis
copyer_xyf5 小时前
LangChain 调用 LLM
后端·python·agent
copyer_xyf5 小时前
Prompt 组织管理
后端·python·agent
asdfg12589635 小时前
JavaBean是什么?怎么理解?有什么用途?
java·开发语言
摇滚侠7 小时前
SpringMVC 入门到实战 文件上传 75-77
java·后端·spring·maven·intellij-idea
GIS数据转换器7 小时前
城市排水生命线安全运行监测平台深度解析
java·运维·人工智能·python·安全·数据挖掘·无人机
华如锦7 小时前
面了很多 Java转AI Agent方向,一些面试题总结
java·开发语言·人工智能·python·ai
睡不醒男孩0308237 小时前
CLup 6.x 版本中针对StarRocks 存算一体集群的完整操作手册
java·服务器·网络·clup
程序员黑豆8 小时前
Java中怎么实现字符串拼接呢【AI全栈开发】
java