5

记录是自 Java 14(第一次预览版)和 Java 15(第二次预览版)以来的新语言功能。据我了解,它们将用于减少不可变数据对象中的样板代码。

所以这一行:

public record Person (String firstName, String lastName) {}

等价于声明一个具有私有 final 字段、每个字段的 getter、公共构造函数和 equals、hashCode 和 toString 方法的类。

@Value然而,这与使用 lombok注释几乎相同:

@Value
public class Person {
    
    String firstName;
    String lastName;
}

除了你显然不需要处理lombok依赖之外,使用记录有什么好处吗?

4

2 回答 2

5

除了Axel已经提出的建议:

  • @Value生成不可变的 java bean 而record不是 java bean。

  • 记录是一个内置功能,它不需要任何插件或安装。

  • Lombok 允许在记录继承时从类继承j.l.Record。扩展一个类会生成一个不言自明的警告:

生成 equals/hashCode 实现但没有调用超类,即使此类没有扩展 java.lang.Object。如果这是故意的,请将“(callSuper = false)”添加到您的类型中。

于 2021-02-16T09:58:54.003 回答
3

恕我直言,最大的优势是它是标准的。在标准化之前,我们在标准库中拥有的几乎所有内容都已在某些变体中可用。但我更喜欢让所有东西都能正常工作并兼容,而不是必须处理依赖关系,引入不同版本的 jodatime、lombok 等。

但要看到 JDK 16+ 被广泛采用还需要一些时间。因此,如果您创建应用程序并且可以自由选择支持的最低 JDK 版本,请使用记录。如果您创建一个库,您可能会瞄准 JDK 11(因为它是 LTS)兼容性,并且您必须使用 lombok。

于 2021-02-16T09:18:05.590 回答