候选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 。 该部分开始,“ 密封类型是根据类型声明中指定的指导对其子类型进行限制的类型。” “说明”部分的第二段指出“密封具有两个不同的目的”,并描述了这些目的:
- “限制哪些类可以是密封类的子类。”
- “有可能在使用现场进行详尽的分析 ,例如在为密封类型的实例切换类型模式时。”
“描述”部分中介绍了密封类型的其他有趣特征。 这些对我来说很突出的是:
- 使用(带示例)
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
候选JEP:记录和密封类型相关推荐
- nginx不记录指定文件类型的日志
不记录指定文件类型的日志 server{ listen 80; server_name www.test1.com www.aaa1.com www.bbb1.com; if ...
- canal 记录 数据变更类型 QUERY ROWDATA INSERT xxx XXXXX
canal 记录 数据变更类型 QUERY ROWDATA INSERT xxx XXXXX 10:40:11.355 [Thread-0] INFO org.canal.CanalClient - ...
- 新JEP将简化Java类型变异
新的JEP Candidate旨在简化处理Java中复杂的类型变异的概念.这个新的JEP Candidate可能会在Java 10中推出,提供了在定义的泛型类型中指定目标对象默认变异的方法,而不是在泛 ...
- java jep_Java 10 – JEP 286:局部变量类型推断
java jep Java 10即将发布,RC Build可在此处获得 . 可在此处找到此发行版的目标功能. 在针对Java 10的所有JEP中,开发人员社区中最有趣且最受关注的是286:Local- ...
- Java 10 – JEP 286:局部变量类型推断
Java 10即将发布,RC Build可在此处获得 . 可在此处找到此发行版的目标功能. 在针对Java 10的所有JEP中,开发人员社区中最有趣且最受关注的是286:Local-Variable ...
- nginx配置不记录指定文件类型日志
1.编辑主配置文件 vim /usr/local/nginx/conf/nginx.conf 2.将log_format combined_realip改为log_format river 备注:日志 ...
- Apache 不记录指定文件类型的日志——LAMP环境搭建
网站访问量比较大的时候,我们可以对一些不必要的类型日志可以不记录到日志中,这样能够减少日志的量.例如图片.js.css等静态对象. 打开虚拟主机的配置文件 vim /usr/local/apache2 ...
- 什么是document对象?如何获取文档对象上的元素?_javascript自学记录:Document类型...
10.1.2 Document类型 Document类型表示文档,document对象是HTMLDocument的一个实例,document是window对象的一个属性: Document节点的特征: ...
- php如何记录访问请求类型,检测PHP中的请求类型(GET、POST、PUT或DELETE)
慕容森 检测HTTP方法或称为REQUEST METHOD可以使用以下代码片段完成.$method = $_SERVER['REQUEST_METHOD']if ($method == 'POST') ...
最新文章
- python参数是什么_最全Python快速入门教程,满满都是干货
- python filecmp
- 【Dairy】2016.10.30 BirthdayParty
- (转)人工智能无处不在,这次是有公司用它来炒股
- spring 事务传播机制和隔离级别
- MySQL Shell 教程
- linux下gmt4绘制站点分布图,GMT复杂图制作教程———让作图简单的飞起来
- movielens1M数据处理
- 16.微信登入与授权
- GV7704的中文资料
- [Azure] 取消 或 删除Azure云订阅服务
- 电子科大杨宁TCPIP协议原理(总结)
- 帷幕的帷是什么意思_古时纺织什么样子?穿越时空看古代纺织发展
- 新公司入职 从零开始搭建环境
- python+turtle制作一个生日蛋糕
- asp毕业设计——基于asp+access的网上选题系统设计与实现(毕业论文+程序源码)——网上选题系统
- 开心测试卷答案软件六下外研版,外研版英语六年级小升初测试卷含答案
- ios 密码大小写数字 符号_iOS 用户密码 数字字母特殊符号设置 判断
- 开会时领导让提建议应该要怎么回答?
- c语言黑皮书pdf,黑皮书