如何解决Java 记录 vs 龙目岛 @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。 -
Record 是一个内置功能,不需要任何插件或安装。
-
Lombok 允许从类继承,而记录继承
j.l.Record
。扩展一个类会产生一个不言自明的警告:
生成 equals/hashCode 实现但不调用超类,即使此类不扩展 java.lang.Object。如果这是有意为之,请将“(callSuper=false)”添加到您的类型中。
,恕我直言,最大的优势是它是标准的。在标准化之前,我们在标准库中拥有的几乎所有内容都可以在某些变体中使用。但我更喜欢让一切正常运行并保持兼容,而不是不得不处理不同版本的 jodatime、lombok 等的依赖关系。
但我们需要一段时间才能看到 JDK 16+ 被广泛采用。因此,如果您创建应用程序并且可以自由选择支持的最低 JDK 版本,请使用记录。如果您创建一个库,您可能会以 JDK 11(因为它是 LTS)兼容性为目标,并且您必须使用 lombok。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。