当前位置: 首页 > article >正文

java15~17 密封类

  密封类是java15第一次预览,java17正式确定。Java15的密封类是一种确定了子类的类。这个改变是巨大的,以往的Java版本根本无法确定到底有哪些子类。而在java15中,如果定义了一个类为密封类就可以确定有哪些直接子类了。如下面的例子:

public sealed class PageQuery permits HouseQuery {

    private int page;
    private int size;

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }
}

  我这个类就有个确定的房屋查询子类:

public final class HouseQuery extends PageQuery {
    private String building;

    public String getBuilding() {
        return building;
    }

    public void setBuilding(String building) {
        this.building = building;
    }
}

子类

  密封类的子类必须定义为final/sealed/non-sealed三种类型。这三种类型各有特点,final类是没有子类的,无需过多解释。non-sealed类是为了扩展,而sealed类是为了限定扩展。以下是一个non-sealed的例子:

@Data
public sealed class PageQuery permits AreaQuery {

    private int page;
    private int size;

}

  

@Data
public non-sealed class AreaQuery extends PageQuery {
    private String province;
    private String city;
    private String county;
}

密封接口

  我个人感觉密封接口的好处是可以马上知道有哪些实现类:

public sealed interface HouseService permits HouseServiceImpl {
}

  其实现类:

public non-sealed class HouseServiceImpl implements HouseService{
}

反射API

  新的反射API可以获取密封类的子类:

public class SealedDemo {
    public static void main(String[] args) {
        Class<PageQuery> clazz = PageQuery.class;
        System.out.println(clazz.isSealed());
        Class<?>[] subclasses = clazz.getPermittedSubclasses();
        for (Class<?> subclass: subclasses) {
            System.out.println(subclass);
        }
    }
}

  结果为:

true
class com.lintongai.java21demo.sealed.AreaQuery

http://www.kler.cn/a/273253.html

相关文章:

  • 高级Python自动化运维:容器安全与网络策略的深度解析
  • 又一次安装autoware.universe的过程
  • 《Java 实现希尔排序:原理剖析与代码详解》
  • h2 数据库命令行工具用法汇总
  • 【idea】idea更新遇到的坑
  • 【LQB15_模拟】C风险对冲
  • 【JS逆向学习】猿人学第六题 js混淆 回溯
  • 数目之差
  • 【Paper Reading】6.RLHF-V 提出用RLHF的1.4k的数据微调显著降低MLLM的虚幻问题
  • upload-labs 0.1 靶机详解
  • 【Spring MVC】Spring MVC拦截器(Interceptor)
  • 《我的AUTOSAR之路》ECUM(二) 唤醒处理
  • 【Java】高级篇1:异常处理
  • 小迪安全42WEB攻防-通用漏洞文件包含LFIRFI伪协议
  • python 深度学习的学习路径
  • 机器学习----特征缩放
  • Mysql增删改查(详解)
  • 摄影第一课
  • java 程序连接 redis 集群 的时候报错 MUTLI is currently not supported in cluster mode
  • 阳光保险MySQL数据库平稳迁移OceanBase,稳定运营超700天
  • XDAG节点版本更新(0.6.5升级到0.7.0)
  • SpringBoot异常:类文件具有错误的版本 61.0, 应为 52.0的解决办法
  • 辐射全国、面向世界、聚焦未来——华为(深圳)全球具身智能产业创新中心正式成立
  • LeetCode刷题记录:(11)组合(初识回溯算法)
  • 前端路由跳转bug
  • 【iOS】——Blocks