候选JEP:记录和密封类型

马克·赖因霍尔德(Mark Reinhold )本周在OpenJDK琥珀色开发者邮件列表上宣布了两个新的紧密相关的候选 JDK增强提案( JEP) ,其帖子分别为“ 新候选JEP:359:记录(预览) ”和“ 新候选JEP:360:密封类型(预览) 。” 这两个候选JEP都是“ 预览功能 ”(由JEP 12定义)。

JEP 359:记录(预览)

JEP 359 “摘要”指出:“使用记录增强Java编程语言。 记录为声明类提供了一种紧凑的语法,这些类是浅层不可变数据的透明持有者。”

JEP 359的“动机和目标”部分说明了记录如何使Java开发人员受益。 该部分首先指出“常见的抱怨是'Java太冗长'或具有太多的'仪式',并解释说”一些最严重的违规者是只充当普通“数据载体”的类。简单的集合。” 本节还指出,记录的目的不只是“减少样板”,而且“它们应易于,清晰,简明,以声明不可变的,行为良好的名义数据汇总。” 简而言之,JEP 359规定的驱动目标是“ 将数据建模为数据”

最近提出的java.lang.Record 草案规范对记录的特性提供了重要的见解。 JEP 359的“描述”部分的开头段落还描述了记录:“ 记录是Java语言中的一种新型类型声明。 像枚举一样,记录是类的一种受限形式。 它声明其表示形式,并提交与该表示形式匹配的API。 记录放弃了类通常享有的自由:将API与表示分离的能力。 作为回报,记录获得了很大程度的简洁性 。” JEP 359的“描述”部分中包含大量文本。

JEP 360:密封类型(预览)

JEP 360的“摘要”部分指出:“使用密封类型增强Java编程语言。 密封类型是类或接口,它们对其他类或接口可以扩展或实现它们施加了限制。”

JEP 360的“目标”部分也很简洁,“在与类型本身相同的维护域中,启用类和接口以将允许的子类型限制为枚举的类型集。”

这是的“描述”部分JEP 360 ,其提供到具体性JEP 360 。 该部分开始,“ 密封类型是根据类型声明中指定的指导对其子类型进行限制的类型。” “说明”部分的第二段指出“密封具有两个不同的目的”,并描述了这些目的:

  1. “限制哪些类可以是密封类的子类。”
  2. “有可能在使用现场进行详尽的分析 ,例如在为密封类型的实例切换类型模式时。”

“描述”部分中介绍了密封类型的其他有趣特征。 这些对我来说很突出的是:

  • 使用(带示例) sealed修饰符和permits子句。
  • “除非使用non-sealed修饰符声明,否则密封类型的抽象子类型是隐式密封的。”
  • “除非使用non-sealed修饰符声明,否则密封类型的混凝土子类型是隐式最终的。”
  • “密封性与最终性一样,由语言编译器和JVM共同实施。 类型的密封性及其允许的子类型列表在类文件中得到了验证,并在运行时强制执行。”

此JEP中涵盖的与密封类型相关的其他有趣细节包括限制(可能发生的编译器错误),密封类型的类形式,以及增加了支持密封类型的反射方法。

结论

JEP 359 (记录预览)和JEP 360 (密封类型预览)在其文档中相互引用。 在这两个候选JEP之间的关系中,JEP 360指出:“密封的类型和记录一起构成通常被称为代数数据类型的结构 。” 记录和密封类型是Java支持模式匹配的关键部分。

翻译自: https://www.javacodegeeks.com/2019/09/candidate-jeps-records-and-sealed-types.html

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

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

相关文章

fedora mysql_Fedora server 安装Mysql8

导读MySQL是一种关系数据库管理系统(RDBMS),作为服务器运行,提供对多个数据库的多用户访问。 这是指导,如何在Fedora 28/27/26,CentOS 7.5 / 6.10和Red Hat(RHEL)7.5 / 6.10上安装或升级MySQL社区服务器最新版本8.0(8.0.12)/5.7(5…

lombok 生成代码_使用Project Lombok减少Java应用程序中的样板代码

lombok 生成代码对Java编程语言最常提出的批评之一是它需要大量的样板代码 。 对于简单的类尤其如此,该类只需要存储一些值就可以。 您需要这些值的getter和setter方法,也许您还需要一个构造函数,覆盖equals()和 hash…

让C/C++程序员告诉你什么叫浪漫,表白黑科技,炫酷多彩求爱利器

前言缘是美丽的邂逅,爱是心跳的感觉,情是心灵的交会,恋是甜蜜的思念,走在爱与被爱的边缘,你见或者不见,爱你的心始终不改变!C语言诠释爱——为TA写下心中情,生成程序传给TA&#xff…

mysql 支持json_MySQL 5.7 对 JSON 的支持

最近有个业务需要能够存储Json并做一些简单的业务逻辑处理。业务找到我说json的数据分析很难用mysql 5.6,这样的纯粹行存来处理难度很大,问我有没啥办法。我第一想到的是mongodb,第二想到的就是mysql 5.7 。 然后一查,哎呀,已经GA…

Java十六进制浮点文字

我如何遇到十六进制浮点数 我正在Java :: Geci中开发一种新功能,以减少代码重新格式化的可能性。 如果重新格式化,当前版本的代码将覆盖原本相同的代码。 这很烦人,因为按下重新格式化键的快捷键相当容易,而且许多项目甚至要求开发…

mysql内部损坏_mysql表损坏故障案例

开发人员反映猎豹有个功能报500错误,让我查一下服务器上有没有做过什么调整,额,不会吧,今天元旦啊,谁会闲的蛋疼去调试服务器啊,最后他们查到了和一个表有关的sql都执行不了,那肯定是这个表损坏…

C语言对电脑做的事儿啊,总有那么一丝恐怖,C语言操盘电脑两例

C语言对自己电脑做的事儿啊,总有那么一丝恐怖,C语言与电脑两例开场先抱歉,偷懒好多天了。今天分享给大家的l两例比较短小精悍,都是针对于计算机屏幕处理的两例,有兴趣的可以放到自己电脑上运行哦。绝对无害&#xff0c…

servlets_jQuery Ajax – Servlets集成:构建完整的应用程序

servlets网上有很多教程,它们解释了有关使用servlet和JSP页面进行Java Web开发的一些知识,但是,我从未找到对于初学者来说足够简洁的教程。 这样的教程应该解释创建一个简单的Web应用程序的整个过程,包括前端,后端&…

mysql分库分表的缺点_MySQL分库分表会带来哪些问题?

分库分表能有效的环节单机和单库带来的性能瓶颈和压力,突破网络IO、硬件资源、连接数的瓶颈,同时也带来了一些问题。下面将描述这些技术挑战以及对应的解决思路。1、事务一致性问题分布式事务当更新内容同时分布在不同库中,不可避免会带来跨库…

JEP 358:有用的NullPointerExceptions

在文章“ 更好的默认NullPointerException消息是否会传入Java? ”,我总结了当时与JEP 草案有关的背景细节,有关使某些类型的NullPointerException (NPE)消息更有用。 上周很高兴看到该JEP现在是候选 JEP ( …

C语言的恶趣味,胆小者莫入,以免入门到放弃,C语言夺命题十例!

前言这些问题测试了C语言的高级知识,包括一些很少使用的特性。有效的C编程需要对诸如未定义的行为,递归和指针算术等概念有深入的理解,但是这些故意复杂的例子并不代表现实世界的代码,当然也不会为了清晰和可维护性而获得任何奖励…

java学习里程碑_记录您的里程和社区运行情况:Java EE 7真实体验

java学习里程碑miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法。 可以创建然后跟踪基于天或基于距离的目标。 它还允许创建社区运行目标,并使多个跑步者参与并跟踪他们朝着该目标的活动。 您还可以找出本地跑步者并与他们联系。 该项目已开始,…

elementui ts vant冲突_如何解决vue多个ui框架css冲突?

解决方法有很多,如果可以对html改动的话,就给你需要细化的页面元素加多一个class或者ID就行了,当然这种方法应该不是你想要的。那么接下来是不改变HTML的情况下,直接用css的方法来实现你想要的效果——方法一 细化选择符假如全局是…

在Spring中使用@ResponseStatus获取Http状态

介绍: 在Spring MVC中,我们可以通过几种方式设置HttpResponse的状态。 在本教程中,我们将使用ResponseStatus批注实现它。 我们可以使用ResponseStatus标记带有状态码和应返回原因的方法或异常类。 在调用标记的处理程序方法时或引发指定的异…

遇C语言条件编译就犯怵,不知什么意思,c语言头文件中的宏定义

前言看见头文件中的条件编译就犯怵,不知什么意思,但是,你老师说:”就得那么写“,你照做,但是知其然而不知其所以然。今天分享下是自己的理解~~~纯属个人献丑,新手可阅,老鸟绕道。代码…

pcie3.0一条通道带宽_小技巧|内存双通道提升性能

今天给大家分享一个小技巧,如果你的电脑有两条或以上的内存条,不同的内存插法也是会影响性能的哦,也就是内存双通道。什么是双通道?双通道内存说白了是两条内存由串联方式改良为并联方式,以得到更大的内存带宽&#xf…

react api_使用React流API将Akka流与rxJava结合在一起

react api这次只是快速的一篇文章,因为我仍在尝试这种东西。 关于React式编程有很多话题。 在Java 8中,我们有Stream API,有rxJava我们有ratpack ,Akka有akka-streams 。 这些实现的主要问题是它们不兼容。 您不能将一个实现的订…

linux安装mysql启动失败的原因_爱在linux系统安装mysql启动失败如何处理?

展开全部两个方法解决1、如果你没有修改过my.cnf文件,请修改,然后把添加datadir[mysqld]port 3306socket /tmp/mysql.sockdatadir /data/mysql/data这时候,你在/opt/mysql下面建32313133353236313431303231363533e4b893e5b19e…

关于Jakarta EE软件包名称更改的思考

Eclipse Foundation 宣布 Jakarta EE无法继续使用javax软件包名称。 显然,这是因为Java EE基于此名称,但不允许对该名称或以该名称开头的类或包进行进一步的修改。 尽管这当然是个坏消息,但对我来说,当宣布Jakarta EE不能将javax…

C++简介源码讲解精辟版,C++入门级C++学习,C++与C的区别值得知晓

C简介源码讲解精辟版,C入门级C学习,C与C的区别值得知晓C语言和C基础区别C标准输入和输出命名空1.命名空间的定义 :namespace 标识符{ } 例:namespace my{int a1;}命名空间中的成员访问:作用域分辨符:: 例&a…