写点什么

进击的 Java(八)

作者:ES_her0
  • 2021 年 11 月 16 日
  • 本文字数:758 字

    阅读完需:约 2 分钟

下面是 Java 的另一个向 kotlin 看齐的特性:sealed class(密封类)。看名字的第一感觉它是一个受限制的类,是的,它只允许指定的类来继承。下面是简单的用法:

package com.example.geometry;
public abstract sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square { ... }
复制代码

声明了密封类之后,需要指定哪些类允许继承,形成了小的组织,父类的代码只在这个几个类中可以使用。在原有的继承关系上做了一层限制,想要实现什么呢?有三点:

  • 让类的作者可以精确的控制子类,保持不被滥用

  • 扩展了原有的权限修饰符,限制父类的使用不再一刀切的开放或者私有

  • 为未来的模式匹配打好基础,指定有限子类之后使模式匹配的分析更简单

其实第三点才是重点,就是为了 switch 模式匹配开发的,关于这点我们以后再分析。这个密封类从 kotlin1.0 的时代就有了,Java15 才放出预览,直到 2021.9 的 Java17 才算正式面世,但 Java 做了接口的密封,随后 kotlin 才添加支持,算是青出于蓝吧。这个特性可以打个比方来描述一下:

原来公司只有 10 个人,其中一个是老板,创业公司还没有设置部门,大家都向这个老板汇报,做的事情都是老板指挥。这是没有密封类之前,可以随意的给父类添加子类。随着公司人员的不断扩张,老板的精力有限肯定没有时间什么事都事必躬亲,所以设置几个部门,任命几个部门的负责人,只要这几个负责人向我汇报每天公司的大小事务就行。这就是指定有权限继承的子类,老板对这几个负责人负责就是对全公司负责了。然后某个重点业务要做时,老板选择了其中一个团队,然后亲自管理,势必要成功。这个时候不必在全公司寻找合适的员工,因为这个团队之前已经建立,在招聘的时候招的就是专才。这就是模式匹配,我可以迅速的找到我需要的子类,节省了大量的分析成本。


用户头像

ES_her0

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
进击的Java(八)