Java record vs lombok @Value



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

那么这一行:

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

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

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

@Value
public class Person {

String firstName;
String lastName;
}

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

除了Axel已经建议的:

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

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

  • Lombok允许从类继承,而记录继承j.l.Record。扩展一个类会生成一个自解释的警告:

生成equals/hashCode实现,但不调用超类,即使该类不扩展java.lang.Object。如果这是有意为之,请在类型中添加'(callSuper=false)'。

我认为最大的优点是它是标准的。在标准化之前,我们标准库中几乎所有的东西都以某种变体提供。但是我更喜欢让所有的东西都工作和兼容,而不是必须处理不同版本的jodatatime, lombok等的依赖关系。

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

最新更新