Java将获得记录和密封类型功能,这是JDK增强建议草案的一部分,旨在解决有关Java太冗长和需要太多“仪式”代码的抱怨。 该建议由Oracle Java语言架构师Brian Goetz发起。
记录提供了一种紧凑的语法来声明类,这些类是浅层不可变数据的透明持有者。 同时,密封类型提供了一种声明类和接口的方法,这些类和接口可以限制其子类型。 这些功能组合起来有时被称为代数数据类型。
在Java中可能出现这些功能的时间不确定。 OpenJDK社区中有关记录和密封类型的官方Java增强建议(JEP)最初并未引用针对这些功能的特定Java版本。 Java的下一个发行版Java Development Kit(JDK)13将于9月发布 。
在解释记录和密封类型背后的动机时,该提案将冗长和仪式作为Java开发人员的共同抱怨,而普通的数据载体就是最糟糕的例子之一。 该提案认为,用Java正确编写一个简单的数据类需要太多低价值,容易出错的代码,例如构造函数或访问器。
IDE将帮助您编写大部分代码,但不会做任何事情来帮助读者从数十行样板中提炼“我是
x
,y
和z
的普通数据载体”的设计意图。 编写对简单数据聚合进行建模的Java代码应该更容易-更容易编写,更易于阅读并且更容易正确。
记录是类的受限形式,它声明一个表示并提交给API以匹配该表示。 密封类型是根据类型声明中指定的指导对其子类进行限制的类型。 记录和密封类型固有的限制的目的是获得更多的清晰度和简洁性。 例如,记录放弃了类通常享有的“自由度”,这是将类的API与表示分离开来的能力,但在返回时获得了很大程度的简洁性。 记录是“状态,整个状态,除了状态之外什么都没有。”
该提案并未试图宣告“在样板上开战”。 使用JavaBean命名约定来解决可变类的问题并不是目标。 提议的目标也不是添加功能,例如注释驱动的代码生成,属性或元编程,即使它们通常被视为问题的“解决方案”。
From: https://www.infoworld.com/article/3390993/jdk-proposal-takes-aim-at-verbose-java-syntax.html