当前位置: 首页 > 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&…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...