详解 Java 17 中新推出的密封类

Java40

Java 17推出的新特性Sealed Classes经历了2个Preview版本(JDK 15中的JEP 360、JDK 16中的JEP 397),最终定稿于JDK 17中的JEP 409。Sealed Classes有两种主流翻译:密封类、封闭类。个人喜欢前者多一些,所以在本文中都称为密封类。其实Sealed Classes的其他许多语言中并不是什么新鲜事物,C#、Scala等高级语言中都有类似的名称,但意义和作用各不相同。下面就来一起认识一下Java 17中的Sealed Classes。

密封类的作用

在面向对象语言中,我们可以通过继承(extend)来实现类的能力复用、扩展与增强。但有的时候,有些能力我们不希望被继承了去做一些不可预知的扩展。所以,我们需要对继承关系有一些限制的控制手段。而密封类的作用就是 限制类的继承

已有的限制手段

对于继承能力的控制,Java很早就已经有一些了,主要是这两种方式:

  1. final修饰类,这样类就无法被继承了
  2. package-private类(非public类),可以控制只能被同一个包下的类继承

但很明显,这两个限制的粒度都很粗,如果再细化一些限制就很难实现。

[En]

However, it is clear that the granularity of both restrictions is very coarse, and it is difficult to achieve if there are more refined restrictions.

新特性:密封类

为了进一步增强限制能力,Java 17中的密封类增加了几个重要关键词:

  • sealed:修饰类/接口,用来描述这个类/接口为密封类/接口
输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

Mybatis逆向工程配置

Mybatis 提供了一个逆向工程工具,该工具可以根据数据表自动生成针对单表的 po 类、mapper 映射文件和 mapper 接口。大大缩减了开发时间,可以让开发人员将更多的精力放在繁杂的业务逻辑...
Java

Java学习 (16) Java方法篇(03)递归

递归 语法实例 递归与循环的区别 递归优缺点 循环优缺点 递归 递归就是就是自己调用自己 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的...
Java

【Unity】在Unity中通过触发播放音频

1、创建音频播放组件 首先在Hierarchy窗口中新建空组件。 选中新建的组件,在Inspector窗口中添加组件"Audio Source",并将要播放的音乐拖入其"Audio Clip"属性。 ...
Java

mybatis中复杂查询(多对一和一对多)1-环境搭建

一.基本知识 (1).多对一的理解(以学生和老师为例子) 老师角度:一个老师会教多个学生【一对多】 学生角度:多个学生对应一个老师【多对一】 (2).如何处理:比较常见的两种方式,一个是联表查询,一个...
Java

spring 配置文件 –bean

bean标配的基本配置 id:Bean实例在Spring容器中的唯一标识 class Bean的全限定名 scope 1.当scope的取值为singleton时 Bean的实例化个数: 1个 Bea...
Java

设计模式

设计模式 工厂模式 ```java public class Test { public static void main(String[] args) { Computer c1 =Computer...
Java

rabbitmq 安装

rabbitmq 安装 官网地址 https://rabbitmq.com/download.html 前言 RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写, 即需要先...
Java

Netty源码分析之ByteBuf引用计数

引用计数是一种常用的内存管理机制,是指将资源的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。Netty在4.x版本开始使用引用计数机制进行部分对象的管理,其实现思路并不是特别复杂,它主要涉...
Java

Spring Bean生命周期

本文基于图灵课堂周瑜老师的讲解整理,包括spring bean加载的过程,主要是扫描BeanDefinition以及初始化非懒加载单例Bean两部分,源码取自SpringFramework 5.3.2...
Java

15分钟学会JWT使用

什么是JWT? JSON Web Token ,通过数字签名的方式,以JSON对象为载体,在不同的服务终端之间安全的传输信息。 jwt 可以生成 一个加密的token,做为用户登录的令牌,当用户登录成...