范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Java类(接口)的新类型密封类

  密封类是Java 17正式支持的一个新特性,它让Java中类的继承可以更加细粒度的进行控制。今天就来认识一下这个新的功能。  密封类
  在以往的Java类继承中,Java类的继承控制非常有限,仅能通过 final 关键字和访问控制符来控制类的继承。例如final 类无法被集成;包私有类仅仅只能在该包下进行继承。
  这显然是不够的。如果一个功能只允许出现在 Phone 和Pad 上,不允许出现在Computer 上。如果不对该功能的继承实现进行限制,开发人员将很容易滥用该功能的实现类,错误地重用一些代码。这就是密封类产生的原因。 密封类的声明❝
  密封类不仅仅可以是类,也可以是接口。文章中的密封类为统称
  密封类(接口)可以明确哪些类和接口可以对其扩展或实现。你可以通过 sealed 修饰符来表明某个类是密封类。但是下面是一个错误的密封类声明: /**  * 这是一个错误的示范  */ public sealed interface SealedService {         void doSomething(); }
  密封类(接口)在声明的时候必须明确可继承(实现)的范围,所以上面的写法是错误的。必须用 permits 子句指定允许扩展密封类的类,而且permits 关键字位于extends 或者implements 之后。 ❝
  简而言之,密封类明确了哪些其他类(或接口)可以扩展它们。
  下面是正确的写法:  /**  * 这是一个正确的示范,明确了可继承的子类为{@link SealedServiceImpl}  * 该密封类接口同时实现了{@link SuperService}  */ public sealed interface SealedService extends SuperService permits SealedServiceImpl {     void doSomething(); }  /**  * 密封类子类  */ public final class SealedServiceImpl implements SealedService {     @Override     public void doSomething() {         System.out.println("这是一个密封类子类");     } } 密封类子类的类型
  在上面示例中,密封类(接口)的实现类用了 final 关键字标记,当然密封类的实现类还可以是密封类: /**  * 密封类子类  */ public sealed class SealedServiceImpl implements SealedService permits SonService {     @Override     public void doSomething() {         System.out.println("这是一个密封类子类");     } }   public final class SonService extends SealedServiceImpl { }
  那么难道密封类(接口)的子类只能是 final 类或者密封类,就不能再扩展了?答案是否定的,只需要使用关键字non-sealed 显式声明密封类的继承实现为非密封类就可以继续扩展了。 public non-sealed class SealedServiceImpl implements SealedService {     @Override     public void doSomething() {      }      /**      * 用{@code non-sealed}声明非密封类,就可以继续扩展了      */     static class NonSealedExtend extends SealedServiceImpl {      }  }
  总结一下,密封类的子类要么是 final Class ;要么是 sealed Class ;要么是 non-sealed Class 。  permits 声明的类必须是直接子类
  密封类 permits 关键字声明的子类必须是直接实现类,为了证明这一点我们这样写: /**  * 错误的示范  */ public sealed interface SealedService extends SuperService permits SealedServiceImpl, SonService {     void doSomething(); }  public sealed class SealedServiceImpl implements SealedService permits SonService {     @Override     public void doSomething() {         System.out.println("这是一个密封类子类");     } }  public final class SonService extends SealedServiceImpl { }
  我使用 SonService 间接实现了SealedService ,结果报错,报错信息要求必须是直接的继承关系。
  错误的密封类继承实现
  从上图可以看出 SonService 并非直接实现SealedService ,这样会打破密封类的规则,所以无法编译通过。 ❝
  密封类中 permits  关键字声明的子类必须是直接子类,不可间接实现。 密封类不支持匿名类和函数式接口
  由于密封类必须明确继承实现关系,所以它不支持匿名类。  /**  * 密封类无法使用匿名类  *  * @return the sealed service  */ public SealedService sealedService(){     // 提示 Anonymous classes must not extend sealed classes     return new SealedService() {         @Override         public void doSomething() {                      }     }; }
  同样也不支持函数式接口:  /**  * 错误的示范  */ @FunctionalInterface public sealed interface SealedService permits SealedServiceImpl {     void doSomething(); } 总结
  密封类已经在Java 17中正式转正,这也是Java 17的非常重要的特性之一。对于需要细粒度控制继承关系的场景来说是非常有用的。  原文链接:https://mp.weixin.qq.com/s/9R8G9PJrPzFlED9MHzKm8A
  原作者:码农小胖哥

微型陨石搅动着木卫二的表面,生命的证据或将浮出水面在接下来的十年里,美国国家航空航天局(NASA)和欧洲航天局(ESA)将发射两个专门的任务,去探索木星的卫星欧罗巴(Europa)。这些任务被称为欧罗巴快艇(EuropaClipp将运动进行到底,东风本田全新思域整车官图发布说起运动家轿,不得不提提本田思域大众凌渡现代菲斯塔名爵6等车型,它们可以说是其中的标杆,深受消费者的喜爱,尤其是思域,曾连续多个月销量破2万大关,可谓是将运动家轿推向了顶峰。而本田三菱汽车未来将使用日产平台,成为首家放弃平台开发的车企说起日系汽车品牌,不得不提提本田丰田日产,它们可以说是其中的标杆,深受消费者的喜爱,不过马自达铃木三菱也是日系不可缺少的产品,它们虽然在国内表现一般,但是在全球市场它们的表现还是非清华大学张扬军城市空中出行时代不再是梦,未来触手可及都知道现在是新能源汽车的天下,大众本田丰田现代等全球知名车企都开始往电气化转型,而我们国内更是将在2035年将新能源汽车份额提升至50,并将在2025年将纯电汽车基建具备市场化条件加入全新一代超智联系统,2022款东风日产轩逸正式上市近日,紧凑级轿车销冠日产轩逸再次升级,2022款正式上市,官方售价为11。9万到14。49万元,2022款主要是针对配置方面进行了升级,话不多说,一起来看看吧!新车外观依然延续了现10月份长城欧拉好猫正式登陆泰国,未来预计本地化生产都知道未来是新能源汽车的天下,大众本田丰田现代等全球知名车企都开始往电气化转型,而咱自主品牌也是一样,可见传统燃油车时代已经开始慢慢终结。长城汽车可以说是人尽皆知,尤其是SUV哈弗全系新增轻混系统,2022款昂科威S有颜有料又能打说起中型SUV,我想大家首先会想到丰田汉兰达大众途观L福特锐界等,它们可以说是其中的佼佼者,深受消费者的喜爱,不过它们三个不是唯一的选择,比如别克昂科威S就是非常不错的选择,尤其是马斯克声明,自动驾驶具备比普通驾驶员高十倍的安全性新能源汽车现在越来越普及,而汽车智能领域也得到了突飞猛进的发展,尤其是自动驾驶技术更是成为无数车企主攻的方向,大众本田丰田现代奔驰奥迪宝马等全球知名车企很早就开始往自动驾驶领域钻研这3款豪华中型SUV挥泪大甩卖,路虎发现神行跟汉兰达一个价随着生活水平的不断提高,豪华车成为了国内消费者的首选,今天就给大家盘点几款豪华SUV,优惠力度空前,没买车的朋友们有福了!奥迪Q5L指导价39。6848。70万元最高优惠4。98万美国宇航局更新了对潜在危险小行星Bennu的威胁分析这个1640英尺(约500米)宽的物体可能在161年内与地球相撞,但几率仍然非常低。上图由OSIRISREx拍摄的Bennu。美国国家航空航天局的OSIRISREx探测器在小行星B月球曾经有过磁层吗?最新研究将告诉你答案预计几年后,美国宇航局将自阿波罗时代(19691972)以来首次将宇航员送上月球。作为阿耳忒弥斯(Artemis)计划的一部分,长期目标是为持续的月球探索计划创建必要的基础设施。同
最高性价比的旗舰投影仪产品,坚果J10体验分享你有没有想过,呆在家里,就可以享受到电影院般的视听体验呢?坚果J10这款旗舰产品或许能够实现你的梦想,只需要在家里,就能实现超大屏幕,联网就能观看各种影视内容。说回坚果J10,这是新品发力2021产品大年元气森林进入品类扩充阶段近一年来,被外界誉为饮料界黑马的元气森林依旧保持着旺盛的产品推新能力。去年,元气森林创始人唐彬森透露,2021年将是元气森林的产品大年,元气森林还有95的产品没有推出,研发费用和研山东鲁能VS广州恒大佩莱PK保利尼奥,蒿俊闵莫伊塞斯替补北京时间8月3日1935,中超第21论焦点战山东鲁能泰山vs广州恒大淘宝在济南奥体中心打响,本赛季双方共3次交锋,山东鲁能泰山仅胜一场(亚冠32点球56),本场比赛战况如何我们拭目sata固态和nvme固态究竟差在哪?兼容性提升大于一切随着闪存颗粒的降价,平台的更新,装电脑时候问配置?在贴吧B站问起固态的选择已经从,860EVO,MX500变成了SN500RC500大家都用上了NVME的固态,主要原因呢当然还是因北向资金大比例增仓个股名单来了!免税茅被疯狂抄底这家芯片公司获大幅度加仓财联社(上海,编辑陆鹿)讯,数据显示,北向资金本周合计净买入A股44。13亿元,上个月整月合计净买入328。40亿元。从本周北向资金前十大增持市值来看,宁德时代获得增持市值最高,达伯克希尔Q3财报叹供应链之多艰手握1492亿美元仅回购自家股票财联社(上海,编辑史正丞)讯,当地时间周六早晨,伯克希尔哈撒韦披露最新财报,如预期般呈现实体业务复苏和金融投资收益收窄的走向。(来源公司官网)根据公司披露,Q3总共实现营收705亿2019年底固态硬盘究竟怎么买?中端固态硬盘市场第一战已经打响大家好,今天呢,又是一个固态硬盘的测评。这半年来,随着各大厂商的发力,还有闪存颗粒的价格回落,目前的中端NVME固态。出现了几位非常有竞争力的选手,本次测试就把这几位选手都请出来。只要胆子大最多可休13天!你的国庆节假期怎么安排?盼望着盼望着假期来了,国庆节马上就要到了!2019年国庆节放假时间已确定,根据国务院办公厅通知精神,今年国庆节放假七天。放假时间如下10月1日(国庆节)至7日放假一周另9月29日(电脑内存怎么选?这四个指标最重要大家好,欢迎来到降频评测室。内存算是机箱当中比较简单的一个硬件,无论是自身所要承担的功能还是装机时的安装,都属于比较简单的。但是功能简单并不以为着不重要,恰恰相反,内存非常重要,如下周大比例解禁股名单创业板科创板几乎全包揽大牛股迈为股份解禁超百亿财联社(上海,编辑陆鹿)讯,在10月份市场经历了一波解禁高峰后,近期,A股迎来解禁低峰期,数据显示,本周A股解禁市值为323。48亿元,下周的解禁市值则基本与本周持平,为323。6企业重组财务效应的三个方面不论企业进行什么样的重组,一定要关注重组对企业盈利能力的持续性贡献。重组对资产负债表的变化资产负债表左边关注战略管理效益(导向是效率与效益),右边强调利益分配和关系。各种重组通常都