JDK16特性

news2024/10/10 10:25:52

JDK16特性

一、JAVA16概述

2021年3月16日正式发布,一共更新了17JEP

https://openjdk.java.net/projects/jdk/16/

image.png

image.png

二、语法层面变化

1.JEP 397:密封类(第二次预览)

  • sealed class 第二次预览

通过密封的类和接口来增强Java编程语言,这是新的预览特性,用于限制超类的使用密封的类和接口限制其他可继承或者实现他们的其他类或接口.

  • 目标

允许类或接口的开发者来控制那些代码负责实现,提供了比限制使用超类的访问修饰符声明方式更多选择,并通过支持对模式的详尽分析而支持模式匹配的未来发展

在java中,类层次构造通过集成实现代码的重用,父类的方法可以被许多子类继承.但是,类层次接口的目的并不总是重用代码.有时是对域中存在的各种可能性进行建模,例如图形库支持函的形状类型.当以这种方式使用类层次结构是,我们可能需要限制子类集从而简化建模.

虽然我们可以通过final来限定子类继承,但是这是绝对杜绝类子类,而类的密封是允许子类,但是限定是那个或者哪些.

2.JEP 394:instanceof 的模式匹配

  • 概括

增强Java编程语言与模式匹配instanceof运算符。 模式匹配 允许更简洁、更安全地表达程序中的常见逻辑,即从对象中有条件地提取组件。

  • 历史

模式匹配 instanceof由JEP 305提出 并在 JDK 14 中作为 预览功能提供。它由JEP 375重新提出, 并在 JDK 15 中进行第二轮预览。

该 JEP 建议在 JDK 16 中完成该功能,并进行以下改进:

  • 取消模式变量是隐式 final 的限制,以减少局部变量和模式变量之间的不对称性。
  • instanceof类型S的表达式与类型T的模式进行比较,使模式表达式成为编译时错误,其中ST的子类型。(这个 instanceof表达式总是成功,然后毫无意义。相反的情况,模式匹配总是失败,已经是一个编译时错误。)

可以根据进一步的反馈合并其他改进。

  • 原因

几乎每个程序都包含某种逻辑,这些逻辑结合了测试表达式是否具有特定类型或结构,然后有条件地提取其状态的组件以进行进一步处理。例如,所有 Java 程序员都熟悉 instanceof-and-cast 习语:

if (obj instanceof String) {
   
    String s = (String) obj; 
    ...
}

有三件事情会在这里:测试(是 objString?),转换(铸造 objString),和一个新的局部变量的声明(s),这样我们就可以使用字符串值。这种模式很简单,所有 Java 程序员都可以理解,但由于几个原因,它并不是最理想的。它很乏味;应该不需要同时进行类型测试和强制转换(instanceof测试后你还会做什么 ?)。这个样板——特别是该类型的三个出现 String——混淆了后面更重要的逻辑。但最重要的是,重复提供了错误潜入程序中的机会。

我们相信 Java 是时候拥抱模式匹配了,而不是寻求临时解决方案。模式匹配允许简洁地表达对象的所需“形状”(模式),并允许各种语句和表达式根据其输入(匹配)测试该“形状” 。许多语言,从 Haskell 到 C#,都因为其简洁和安全而采用了模式匹配

这允许我们将上面繁琐的代码重构为以下内容:

if (obj instanceof String s) {
   
    // Let pattern matching do the work!
    ...
}

3.JEP 395:记录

  • 概述

使用记录增强 Java 编程语言,记录是充当不可变数据的透明载体的类。记录可以被认为是名义元组

  • 历史

记录由JEP 359提出 并在JDK 14 中作为 预览功能提供。

作为对反馈的回应,JEP 384对该设计进行了改进, 并在JDK 15 中作为第二次预览功能交付 。第二次预览的改进如下:

  • 在第一个预览版中,规范构造函数必须是 public. 在第二个预览中,如果隐式声明了规范构造函数,则其访问修饰符与记录类相同;如果显式声明了规范构造函数,则其访问修饰符必须提供至少与记录类一样多的访问权限。
  • @Override注释的含义被扩展为包括注释方法是记录组件的显式声明的访问器方法的情况。
  • 为了强制使用紧凑构造函数,分配给构造函数主体中的任何实例字段会导致编译时错误。
  • 引入了声明本地记录类、本地枚举类和本地接口的能力。

该 JEP 建议在 JDK 16 中完成该功能,并进行以下改进:

  • 放宽长期存在的限制,即内部类不能声明显式或隐式静态成员。这将变得合法,特别是将允许内部类声明作为记录类的成员。

可以根据进一步的反馈合并其他改进。

  • 目标
  • 设计一个面向对象的构造来表达简单的值聚合。
  • 帮助开发人员专注于建模不可变数据而不是可扩展行为。
  • 自动实现数据驱动的方法,例如 equals和访问器。
  • 保留长期存在的 Java 原则,例如名义类型和迁移兼容性。
  • 细节实现

人们普遍抱怨“Java 太冗长”或“仪式太多”。一些最严重的违规者是那些只不过是少数值的不可变 数据载体 的类。正确编写这样的数据载体类涉及许多低价值、重复、容易出错的代码:构造函数、访问器、 equalshashCodetoString 等。 例如,携带 x 和 y 坐标的类不可避免地以类似下面这样的方式结束:

class Point {
   
    private final int x;
    private final int y;

    Point(int x, int y) {
   
        this.x = x;
        this.y = y;
    }

    int x() {
    return x; }
    int y() {
    return y; }

    public boolean equals(Object o) {
   
        if (!(o instanceof Point)) return false;
        Point other = (Point) o;
        return other.x == x && other

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1862940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nuxt 3组件开发与管理

title: Nuxt 3组件开发与管理 date: 2024/6/20 updated: 2024/6/20 author: cmdragon excerpt: 摘要:本文深入探讨了Nuxt 3的组件开发与管理,从基础概念、安装配置、目录结构、组件分类与开发实践、生命周期与优化,到测试与维护策略。详细…

小程序注册

【 一 】小程序注册 微信公众平台 https://mp.weixin.qq.com/ https://mp.weixin.qq.com/注册 邮箱激活 小程序账户注册 微信小程序配置 微信小程序开发流程 添加项目成员 【 二 】云服务 lass 基础设施服务(组装机) 你买了一大堆的电脑配件&#x…

【AI编译器】triton学习:矩阵乘优化

Matrix Multiplication 主要内容: 块级矩阵乘法 多维指针算术 重新编排程序以提升L2缓存命 自动性能调整 Motivations 矩阵乘法是当今高性能计算系统的一个关键组件,在大多数情况下被用于构建硬件。由于该操作特别复杂,因此通常由软件提…

鸿蒙开发报错 -cppcrash happened

报错信息: cppcrash happened in ‘设备名’ 现象:打开应用就闪退,无论是模拟器还是真机都会闪退,预览器没有问题 报错原因,在入口页面添加了export, 页面是不需要导出的,只有组件需要导出&…

三,SSM整合-前后端分离(实现增删改查)

实现增删改查 实现功能03-添加家居信息需求分析/图解思路分析代码实现注意事项和细节 实现功能04-显示家居信息需求分析/图解思路分析代码实现 实现功能05-修改家居信息需求分析/图解思路分析代码实现注意事项和细节 实现功能06-删除家居信息需求分析/图解思路分析代码实现课后…

数据接入开放协议-术语表

数据与元数据 - 数据 传感器采样生成的 具有物理含义的一个或一系列值 - 实时数据 包含 时间、数据质量指示的一个或一系列数据 - 位号元数据 对于传感器采样得到的数据的物理描述 包括但不限于 时间、单位、数据范围、数据质量指示 上位机与下位机 - 上位机supOS 系统 - 下位…

信息学奥赛初赛天天练-32-CSP-J2021阅读程序-冒泡排序、数组去重、二分查找、坐标确定矩形应用

PDF文档公众号回复关键字:20240625 2021 CSP-J 完善程序3 1 完善程序 (单选题 ,每小题3分,共30分) (矩形计数)平面上有n个关键点,求有多少个四条边都和x轴或者y轴平行的矩形,满足四个顶点都是关键点。给出的关键点可能有重复&am…

ComfyUI 插件竟然包含病毒!做好这 5 点降低中招风险!

前言 大家好,这里是和你们一起探索 AI 的AI绘画月月~ ComfyUI 是目前最受欢迎的开源 AI 绘画绘画工具之一,它具有极高的灵活性,只需安装对应的插件就可以自己搭建工作流,实现个性化出图或体验最新的 AI 模型。如果你是 ComfyUI 的…

LP-SCADA数据采集监控平台是什么?

SCADA系统,即数据采集与监视控制系统,是一种以计算机软件为基础,利用计算机技术、自动控制技术、通信与网络技术、传感仪表及执行机构实现对广域分布生产过程设备设施的远程数据采集、控制、监测、参数调节以及各类信号报警的生产过程控制与调…

vue大屏适配方案

前言 开发过大屏的铁汁们应该知道,前期最头疼的就是大屏适配,由于大屏项目需要在市面上不是很常见的显示器上进行展示,所以要根据不同的尺寸进行适配,今天我将为大家分享的我使用的大屏适配方案,话不多说,直…

Unity 弧形图片位置和背景裁剪

目录 关键说明 Unity 设置如下 代码如下 生成和部分数值生成 角度转向量 计算背景范围 关键说明 效果图如下 来自红警ol游戏内的截图 思路:确定中心点为圆的中心点 然后 计算每个的弧度和距离 Unity 设置如下 没什么可以说的主要是背景图设置 代码如下 …

天才程序员周弈帆 | Stable Diffusion 解读(四):Diffusers实现源码解读

本文来源公众号“天才程序员周弈帆”,仅用于学术分享,侵权删,干货满满。 原文链接:Stable Diffusion 解读(四):Diffusers实现源码解读 接上一篇文章[天才程序员周弈帆 | Stable Diffusion 解读…

关于哈希表的一点理论基础

1.哈希表 数组就是哈希表,关键元素就是数组的下标。主要用于判断一个元素是否在集合中出现。 2.哈希函数 3.哈希碰撞 即有两个元素的下标相同 3.哈希碰撞的解决办法 (1)拉链法: 放到链表中,但要注意控制哈希表的大…

【SpringSecurity】认证与鉴权框架SpringSecurity——授权

目录 权限系统的必要性常见的权限管理框架SpringSecurity授权基本流程准备脚本限制访问资源所需权限菜单实体类和Mapper封装权限信息封装认证/鉴权失败处理认证失败封装鉴权失败封装配置SpringSecurity 过滤器跨域处理接口添加鉴权hasAuthority/hasAnyAuthorityhasRole/​ hasA…

L58---100.路径总和(广搜)---Java版

1.题目描述 2.思路 (1)首先检查p,q节点是不是为空;如果同时为空,则他们是相同的树 (2)p,q节点如果一个为空,一个不为空,则他们不是相同的树 (3)p,q的值不一样,则他们不是相同的树 (4)递归遍历左子树和右子…

用英文介绍纽约:NEW YORK, USA‘s MEGACITY

NEW YORK, USA’s MEGACITY | America’s Largest City Link: https://www.youtube.com/watch?vdzjQ-akB3BI&listPLmSQiOQJmbZ7TU39cyx7gizM9i8nOuZXy&index24 The story of New York City, America’s megalopolis. Summary Paragraph 1: The Historical Developm…

路由表操作

路由表(Routing Table)是网络设备(如计算机、路由器、交换机等)用来确定数据包传输路径的数据库。每当网络设备收到一个数据包时,它会查找路由表,决定将数据包转发到哪个网络接口或网关。下面介绍路由表的基…

vue3 antv/g6 动态设置mode,让节点不可以拖动

1、查看一下官网的设置说明 G6 设置mode 默认模式: const graph new G6.Graph({container: div,width: 500,height: 500,modes: {default: [drag-node,drag-canvas],custom: [drag-canvas]} })默认情况下,我们定义的是default,然后创建节…

Emacs之显示blame插件:blamer、git-messenger(一百四十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

【C++STL】Vector扩容机制

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…