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

jdk17新特性—— 密封类(Sealed Classes)

目录

    • 一、密封类(Sealed Classes)的概述
      • 1.1、概述
      • 1.2、特性
      • 1.3、注意事项
    • 二、密封类(Sealed Classes)代码示例
      • 2.1、密封类(Sealed Classes)代码结构示例
      • 2.2、密封类(Sealed Classes)代码示例
    • 三、密封类(Sealed Classes)接口代码示例
      • 3.1、密封类(Sealed Classes)接口代码结构示例
      • 3.2、密封类(Sealed Classes)接口代码示例

一、密封类(Sealed Classes)的概述

1.1、概述

  • 密封类和接口 限制哪些其他类或接口可以扩展或实现它们。

1.2、特性

  • JDK15的JEP 360: Sealed Classes (Preview)中作为预览版引入;
  • JDK16的JEP 397: Sealed ClassesSecond Preview)中第二轮预览;
  • JDK17的JEP 409: Sealed Classes中正式转正。

1.3、注意事项

  • permits指定的子类必须与父类在同一个显式命名的module下;
  • permits指定的子类必须直接继承父类;
  • permits指定的子类必须声明自己的密封类型;
  • final表示这个子类不能再被继承了;
  • non-sealed表示这个子类没有密封限制,随便继承。

二、密封类(Sealed Classes)代码示例

2.1、密封类(Sealed Classes)代码结构示例

  • 密封类(Sealed Classes)代码结构
    在这里插入图片描述

2.2、密封类(Sealed Classes)代码示例

一个类可以用sealed修饰,表示这个类只能由permits指定的子类或接口来继承或实现。

  • 抽象类Animal 由sealed修饰,只能由permits指定的子类或接口来继承或实现。

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 19:41* @Description: 动物类* 一个类或接口可以用sealed修饰,表示这个类或接口只能由permits子句指定的子类或接口来继承或实现。*/
    public abstract sealed class Animal permits Dog,Cat,Pig{public abstract String eat();
    }
    
  • 抽象类Animal 由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。final表示这个子类不能再被继承了。

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 19:47* @Description: 抽象类Animal被sealed修饰,说明它的子类会受到限制,只能是permits子句中生命的子类的其中一个。这些子类如下**/
    public final class Cat extends Animal{@Overridepublic String eat() {return "鱼";}
    }
    
  • 抽象类Animal 由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。non-sealed表示这个子类没有密封限制,随便继承

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 19:52* @Description: 抽象类Animal被sealed修饰,说明它的子类会受到限制,只能是permits子句中生命的子类的其中一个。这些子类如下*/
    public non-sealed class Dog extends Animal{@Overridepublic String eat() {return "骨头";}
    }
    
  • 类Pig由sealed修饰,只能由permits指定的子类或接口来继承或实现。

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 19:59* @Description: 抽象类Animal被sealed修饰,说明它的子类会受到限制,只能是permits子句中生命的子类的其中一个。这些子类如下*/
    public sealed class Pig extends Animal permits White,Black{@Overridepublic String eat() {return "饲料";}
    }
    
  • 类Pig由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。non-sealed表示这个子类没有密封限制,随便继承

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 20:03* @Description:*/
    public non-sealed class White extends Pig{
    }
    
  • 类Pig 由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。final表示这个子类不能再被继承了。

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 20:09* @Description:*/
    public final class Black extends Pig{}
    

三、密封类(Sealed Classes)接口代码示例

3.1、密封类(Sealed Classes)接口代码结构示例

  • 密封类(Sealed Classes)接口代码结构
    在这里插入图片描述

3.2、密封类(Sealed Classes)接口代码示例

一个接口可以用sealed修饰,表示这个接口只能由permits指定的子类或接口来继承或实现。

  • 接口Animal 由sealed修饰,只能由permits指定的子类或接口来继承或实现。

    package com.xz.jdk17.day3;/*** @Author: xz* @Date: 2024-01-31 20:11* @Description:*/
    public sealed interface Animal permits Cat,Dog,Pig{String eat();
    }
    
  • 接口Animal由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。final表示这个子类不能再被继承了。

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:15* @Description:*/
    public final class Dog implements Animal{@Overridepublic String eat() {return "骨头";}
    }
    
  • 接口Animal由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。non-sealed表示这个子类没有密封限制,随便继承

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:18* @Description:*/
    public non-sealed class Cat implements Animal{@Overridepublic String eat() {return "鱼";}
    }
    
  • 接口Pig由sealed修饰,只能由permits指定的子类或接口来继承或实现。

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:21* @Description: 注意接口可以被实现,也可以被继承。*/
    public sealed interface Pig extends Animal permits Black,White {String eat();
    }
    
  • 接口Pig由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。non-sealed表示这个子类没有密封限制,随便继承

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:24* @Description:*/
    public non-sealed class White implements Pig{@Overridepublic String eat() {return null;}
    }
    
  • 接口Pig 由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。final表示这个子类不能再被继承了。

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:27* @Description:*/
    public final class Black implements Pig{@Overridepublic String eat() {return null;}
    }
    

相关文章:

jdk17新特性—— 密封类(Sealed Classes)

目录 一、密封类(Sealed Classes)的概述1.1、概述1.2、特性1.3、注意事项 二、密封类(Sealed Classes)代码示例2.1、密封类(Sealed Classes)代码结构示例2.2、密封类(Sealed Classes)代码示例 三、密封类(Sealed Classes)接口代码示例3.1、密封类(Sealed Classes)接口代码结构示…...

【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案

盘点本年度我们探索服务的HA高可用解决方案 前言介绍HA高可用高可用性评估可用性是平均故障间隔时间 HA技术架构的特性分析Master/Slave架构主从复制模式主从复制的特性分析 高可用案例RocketMQ的主从架构责任划分同步机制动态化RocketMQ高可用架构中有限状态机的转换 总结Mast…...

计算机网络-物理层设备(中继器 集线器)

文章目录 中继器中继器的功能再生数字信号和再生模拟信号同一个协议 集线器(多口中继器)不具备定向传输的原因集线器是共享式设备的原因集线器的所有接口都处于同一个碰撞域(冲突域)内的原因 小结 中继器 中继器的功能 中继器的…...

PaddleDetection学习4——使用Paddle-Lite和OpencCV在 Android 上实现实时的人脸检测(java)

使用Paddle-Lite在 Android 上实现人脸检测 1 环境准备2. 部署步骤2.1 下载PaddleLite-android-demo2.2 运行face_detection_demo项目3 导入OpenCV进行优化3.1 Android Studio配置OpenCV3.2 预处理代码3.3 后处理代码3.4 优化结果1 环境准备 参考前一篇在 Android 上使用Paddl…...

mkcert的安装和使用,5分学会在本地开启localhost的https访问方式

mkcert官方仓库地址:https://github.com/FiloSottile/mkcert#installation mkcert 是一个简单的工具,用于制作本地信任的开发证书。它不需要配置。 简化我们在本地搭建 https 环境的复杂性,无需操作繁杂的 openssl 实现自签证书了&#xff…...

RHCE DNS域名解析服务器

目录 1. 正向解析 1.1 安装必要软件 1.2 配置静态ip 1.3 DNS配置 1.4 测试 2. 反向解析 2.1 关闭安全软件,安装必要软件 2.2 配置静态ip 2.3 DNS配置 2.4 测试 1. 正向解析 1.1 安装必要软件 1.2 配置静态ip 服务器配置 nmcli c modify ens32 ipv4.method man…...

创建表与删除表(六)

表的基本操作(六) 一、创建表 1.1 使用DDL语句创建表 CREATE TABLE 表名(列名 类型,列名 类型......); 示例: 创建一个 employees 表包含雇员 ID ,雇员名字,雇员薪水。 create table employees(employee_id int,em…...

微信开发者工具 git 拉取 failed invalid authentication scheme

微信开发者工具 git 拉取 failed invalid authentication scheme 拉取代码时报错,无效身份认证 解决方案: 1.检查git地址是否正常 2.检查git用户名密码是否正确...

(4)Elastix图像配准:3D图像

文章目录 前言1、项目实战2、参数文件2.1、parameter_file_rigid_3D.txt2.2、parameter_file_affine_3D.txt2.3、parameter_file_bspline_3D.txt前言 (1)Elastix图像配准:原理 + 源码(详解) (2)Elastix图像配准:参数文件(配准精度的关键) 1、项目实战 将以下文件保…...

windows安装oracle之后怎么连接使用

目录 1.打开SQl Developer 2.选择JDK 3.登录 4.创建表空间,用户 安装oracle的详细教程 WINDOWS安装Oracle11.2.0.4-CSDN博客 1.打开SQl Developer 找到 SQl Developer 2.选择JDK 根据你安装的oracle版本,因为我的oracle是安装的32位的,所以这里jdk也要选择32位 选择到ja…...

在前端开发中,常见的数组循环方式有以下几种:

在前端开发中&#xff0c;常见的数组循环方式有以下几种&#xff1a; for 循环&#xff1a;使用最传统的 for 循环来遍历数组元素。 const array [1, 2, 3, 4, 5];for (let i 0; i < array.length; i) {console.log(array[i]); }forEach() 方法&#xff1a;使用数组的 …...

Redis -- 单线程模型

失败是成功之母 ——法国作家巴尔扎克 目录 单线程模型 Redis为什么这么快 单线程模型 redis只使用一个线程&#xff0c;处理所有的命令请求&#xff0c;不是说redis服务器进场内部真的就只有一个线程&#xff0c;其实也有多个线程&#xff0c;那就是处理网络和io的线程。 R…...

C语言第十五弹---操作符(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 操作符 1、操作符的分类 2、二进制和进制转换 2.1、2进制转10进制 2.1.1、10进制转2进制数字 2.2、2进制转8进制和16进制 2.2.2、2进制转16进制 3. 原码、反…...

使用宝塔面板访问MySQL数据库

文章目录 前言一、安装访问工具二、查看数据库总结 前言 前面我们已经部署了前后端项目&#xff0c;但是却不能得到数据库的信息&#xff0c;看有谁再使用你的项目。例如员工、用户等等。本次博客进行讲解如何在宝塔面板里面访问MySQL数据库。 一、安装访问工具 1、打开软件商…...

Win10 双网卡实现同时上内外网

因为需要同时上内网和外网&#xff0c;但公司做了网络隔离&#xff0c;不能同时上内外网&#xff0c;所以多加了块无线网卡&#xff0c;配置双网关实现同时上内外网&#xff0c;互不影响 打开 Windows PowerShell&#xff08;管理员&#xff09;&#xff0c;输入&#xff1a;ro…...

Django模型(六)

一、其它查询 文档:https://docs.djangoproject.com/zh-hans/4.1/ref/models/querysets/#count 1.1、排序 Queryset.order_by(*fields) 默认情况下,QuerySet 返回的结果是按照模型 Meta 中的 ordering 选项给出的排序元组排序的 可以通过使用 order_by 方法在每个 QueryS…...

【Linux】Linux基本指令

目录 1.ls指令 2.cd指令 3.touch指令 4.mkdir指令 5.rmdir指令和rm指令 5.1rmdir指令 5.2rm指令 6.man指令 7.cp指令 8.mv指令 9.cat指令 10.more指令 && less指令 10.1more指令 10.2less指令 11.head指令 && tail指令 11.1head指令 11.2tai…...

stm32中的SPI

SPI的简介 文章目录 SPI的简介物理层协议层基本通讯过程起始和终止信号数据有效性CPOL/CPHA及通讯模式 STM3的SPI特性及架构通讯引脚时钟控制逻辑数据控制逻辑整体控制逻辑通讯过程 代码配置实现指令集结构体的定义SPI时钟信号的定义SPI端口定义SPI命令 flash驱动代码初始化代码…...

ChatGPT可与自定义GPTs一起使用,智能AI代理时代来啦!

1月31日凌晨&#xff0c;OpenAI在社交平台公布了一个超强新功能&#xff0c;可以在ChatGPT中输入“GPTs名字”的方法&#xff0c;调用多个自定义GPTs一起协同工作。 例如&#xff0c;我想开发一款社交APP&#xff0c;1&#xff09;可以先用专业分析GPTs做一下市场调研&#xf…...

《Numpy 简易速速上手小册》第1章:Numpy 基础(2024 最新版)

文章目录 1.1 创建和操作 Numpy 数组1.1.1 基础知识1.1.2 完整案例&#xff1a;多维数据分析1.1.3 拓展案例 1&#xff1a;时间序列数据1.1.4 拓展案例 2&#xff1a;图像数据处理 1.2 数组的索引和切片1.2.1 基础知识1.2.2 完整案例&#xff1a;时间序列分析1.2.3 拓展案例 1&…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...