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

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
  原作者:码农小胖哥

贾跃亭真上市了!但FF91再好你敢买?关注并标星电动星球News每天打卡阅读更深刻理解汽车产业变革出品电动星球News作者胖飞同学如果给你一个投资贾跃亭的机会,你敢掏钱吗?几番周折,贾跃亭创办的FF(法拉第未来)终于还特斯拉AIDay前瞻第二集纯视觉FSD背后的哲学关注并标星电动星球News每天打卡阅读更深刻理解汽车产业变革出品电动星球News作者毓肥根据马斯克的预告,一个月之后,特斯拉2021AIDay就将到来。我们不知道届时特斯拉会发布什5分钟续航120公里,极氪的噱头还是实力?关注并标星电动星球News每天打卡阅读更深刻理解汽车产业变革出品电动星球News作者毓肥上周,极氪公布了一个视频,内容有关极氪001的充电速度。视频中,这辆极氪001最高可以实现4小鹏P5预售1623万,它会成为智能汽车足够好的门槛吗?关注并标星电动星球News每天打卡阅读更深刻理解汽车产业变革出品电动星球News作者毓肥今天上午,小鹏汽车新款轿车P5正式开启了预售,预售价为1623万元。P5按照NEDC续航一共拿下雷诺日产,这家中国新能源巨头正抢滩欧洲关注并标星电动星球News每天打卡阅读更深刻理解汽车产业变革出品电动星球News作者胖飞同学前两天有一则新闻,编辑部里讨论了许久。一家名叫远景动力的中国公司拿下了日产的动力电池大单新风系统,我装了你随意随着人类生产生活产生的废气烟尘越来越多,排放到大气中,导致空气污染问题的日益严峻,尤其在经济发达的大城市,空气的质量远远无法和乡村比拟。而且,面对汽车尾气带有异味的气体雾霾等等有害面积不足5的卫生间如何完美逆袭?任何空间,只要和小字沾边,都会让屋主和设计师无比头疼。的确,当面积过于局限时,就注定很多功能及设计无法实现。但在寸金寸土的当下,小户型当道,一切成为不可逆的存在,我们能做的,就是在卧室背景墙别放空,这样设计美极了卧室作为私人领地,一个不以展示为目的的空间,在装修布置方面,往往以温馨舒适为主,而作为大面积色块的床头背景墙自带吸引目光的属性,不同颜色不同材质不同造型都会给卧室带来不一样的视觉效卧室多出来的面积,到底该不该做卫生间?针对一些空间面积比较大的卧室,往往会将床和梳妆台以外多出来的面积开拓出新的领域。比如给卧室增加一个卫生间,减轻空间负担,增加使用者的便利,缩短每次起夜需要活动的距离。但也有后悔给卧客厅升级后,颜值翻了三倍如何打造一个功能丰富且具有新意的客厅?在千篇一律的客厅设计中,电视茶几沙发几乎成了固定模板,毫无新意又略显鸡肋,无法再适应部分年轻人多元化的生活需求。比起这种固定模板,人们更希望在拒绝无效布局,厨房连接阳台应该这样做厨房与阳台相连,这样的户型格局并不少见,有些是纯粹的生活阳台,有些是多余的赠送空间,但无论是哪一种属性定义,在设计上都不应该马虎。今天,我们就来详细聊聊在这种格局之下该如何进行设计
中国的社交领域已经到终局了吗?未来,社交领域可能会有哪些发展和创新?关于是否是终局的事情,我觉得是一个伪命题。当年MSN一度非常火热,即便QQ出来很多年,依然无法撼动MSN在社交白领领域的地位,但微信米聊的出现直接颠覆了MSN的地位,如今,MSN已翻新iPhone验机报告却全绿,目前有很多人已中招买二手iPhone最怕什么?肯定是翻新机,虽然翻新机外表光鲜亮丽,但实际上却是各个高仿零件拼凑起来的。不仅体验不好,寿命也不长。但现在很多翻新iPhone的验机报告是全绿,所以很多比特币一度跌破40000美元,美监管机构称加密货币威胁金融系统比特币周二连续第三天下跌,一度跌破40000美元,为8月份以来首次。以太坊和莱特币等其他加密货币也大幅下跌。根据CoinMarketCap的数据,截至发稿,比特币价格下跌约6。25火币早报美SEC主席希望将加密货币纳入公共政策框架日期20210922火币早报会在每天上午准时为您带来最新的行情信息,以及行业动态。帮助投资人在最短的时间内了解隔夜市场中的最新动态,更好的把握行情。市场前沿电影院巨头AMC或考虑接东亚排名第一的企业超过阿里腾讯三星,目前市值3。95万亿元近些年来,受益于互联网行业的高速发展,互联网行业中的上市公司在股市中也是一骑绝尘。就如我国的阿里巴巴集团,其市值最高时一度达到了8000亿美元(约人民币5。18万亿元),一举成为整云朵课堂是如何利用火山引擎服务做到更懂用户的?云朵课堂创办于2014年10月,已经推出云朵营销云朵智能客服云朵CRM云朵微课等产品,服务于教育机构和有培训营销需求的企业客户。作为一家数字化服务商,云朵课堂有很强的数字化意识。当微信淘宝抖音开始互通!我看到了三个赚钱机会巨头互通,互联网卸下藩篱!你在淘宝上看到一个很划算的商品,想分享给朋友,却发现链接用微信打不开?这种糟糕的用户体验,很快就要成为历史了。9月9日,工信部召开屏蔽网址链接问题行政指导聊聊小钢炮笔记本最适合用的配置什么是小钢炮笔记本?同时兼顾性能与尺寸的笔记本电脑,既有游戏性能,又有便携性,被我们称作小钢炮或者全能本。当然了,这也意味着它的便携性不如核显轻薄本,性能也不如传统游戏本。这类小尺互联网基建化,互联互通只是开始编辑导读互联网的未来是什么样的呢?我们可能过于乐观。我们从传统互联网时代跃迁到互联互通的互联网时代,时间跨度还是挺短的,这期间可能会有很多问题。就连我们引以为豪的互联网基建化也只是MotoE40细节泄露6。5英寸720p显示屏三摄像头4800万像素主传感器摩托罗拉上周发布了MotoE20,这是一款Android11Go版手机。据evleaks透露,该公司还在开发一款更高档一点的机型,即MotoE40。这款手机将由一颗未命名的八核处理华为智慧屏全系升级HarmonyOS2常用常新带给用户更好体验去年12月份,华为在华为智慧屏S系列发布会上,提出了常用常新的概念。简单来说,就是华为通过升级,为智慧屏产品阶段性带来一个个新的功能新的场景新的UI,让消费者感觉每过一段时间就拥有