建议的Java记录的工作仍在继续。 Brian Goetz 昨天在OpenJDK amber-spec-experts邮件列表上启动了三个新线程,其中两个专注于Java Records。 这两个面向记录的线程之一讨论了Java记录是否应支持varargs 。 另一个线程为提议的类java.lang.Record
提供了初始草案规范,这是本文的主题。
提议的用于java.lang.Record
类级Javadoc的第一句话当前提到该类,“这是所有Java语言记录类的通用基类。” 此初始规范还显示java.lang.Record
被指定为public abstract class
。
在此初始java.lang.Record
规范中明确声明了三个“公共” public abstract
方法: equals(Object) , hashCode()和toString() 。 所有这三种方法都标注有@Override
和归档的{@inheritDoc}
与记录专业化的细节 。 三种方法中每种方法的Javadoc专长都包括使用@implNote标记的特定于记录的实现说明。 类级别的Javadoc告诉我们,可以隐式创建这三个“通用”方法:“ equals(Object) , hashCode()和toString()方法的隐式声明是从所有组件字段派生的。”
提议的类级别的Javadoc当前指出:“ 记录类是一种固定不变的值(称为记录组件 )的浅层不变的透明载体。” 它还将“组件字段”描述为“与每个组件相对应的private static
字段,其名称和类型与组件的名称和类型相同。” Javadoc声明这些组件字段是必填字段,并添加了“与每个组件相对应的公共访问器方法,其名称和返回类型与该组件的名称和返回类型相同”。 此外,Javadoc补充说,如果没有明确表示,则“为这些成员提供隐式实现”。
拟议的Javadoc还解释了何时可能选择显式指定Record构造函数或访问器方法:“为规范构造函数或访问器方法提供显式声明的主要原因是验证构造函数参数,对可变组件执行防御性复制或规范化组组件。”
java.lang.Record
规范草案为与Java Records的实现和使用有关的讨论增加了具体性。 拟议的规范已经引起了有关琥珀规范专家邮件列表的讨论 。 与本规范相关的讨论主题包括: Records是否应禁止克隆 ; 是否在equals方法Javadoc中提及原语的装箱;以及Record.toString()
和Enum.toString()
是否应在其Javadoc中添加有关更改输出时的警告字段被重命名。
对于一个规范的介绍和讨论java.lang.Record
升高了我从这一特性预期项目琥珀 。
其他资源
- java.lang.Record的规范草案
- JEP草案:Java语言的记录(预览)
- 2019年4月Java记录更新
- 记录更新 (Java数据类)(2018年4月)
翻译自: https://www.javacodegeeks.com/2019/08/java-lang-record-draft-specification.html