Java 记录与 lombok @Value [重复]

问题描述 投票:0回答:2

记录是自 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 依赖之外,使用记录还有什么好处吗?

java lombok java-15
2个回答
6
投票

除了 Axel 已经建议的内容之外:

  • @Value
    生成不可变的 JavaBeans,而
    record
    不是 JavaBean。

  • 录音是内置功能,不需要任何插件或安装。

  • Lombok 允许从类继承,而记录则继承

    java.lang.Record
    。扩展类会生成一个不言自明的警告:

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


4
投票

恕我直言,最大的优点是它是标准的。在标准化之前,我们在标准库中拥有的几乎所有内容都已以某种变体形式提供。但我更喜欢让一切正常工作并兼容,而不是必须处理不同版本的 jodatime、lombok 等的依赖关系。

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.