马克·赖因霍尔德(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