为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Lombok 将具有许多对象作为字段的类实例化?

如何使用 Lombok 将具有许多对象作为字段的类实例化?

皈依舞 2021-10-13 16:13:21
我有一个存储许多字段的类(原始类型和对象,如Stringor List)。所有字段都是必需的,并且只需要在创建对象时设置一次。在确保满足这些条件的同时,使用 Lombok 实例化它的正确方法是什么:1) 由于 Setter 返回可变对象的风险,没有警告。2) 不要使用构造函数来实例化所有字段,因为字段数可以大于 10。3)能够继承和扩展这个类,其中每个子类只会增加更多的字段,其他什么都不做。4) 序列化友好(即有一个空的公共构造函数)。class ParentData {    int id;    String name;}class ChildData extends ParentData {    long childId;    long[] friendId;    String[] friendNames;}目前,即使我将字段设置为private final,我也会收到 findBugs 错误,即[]对象是可变的。
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

也许你可以看看lombok的Builder


查看完整回答
反对 回复 2021-10-13
?
潇湘沐

TA贡献1816条经验 获得超6个赞

如果约束 3 意味着您想限制子类可以做什么(即确保它们永远不会可变),那么这是不可满足的,因为您无法在 Java 中对子类强制执行不变性。如果这意味着“应该可以添加字段”,那么一切都很好。

这就是说,你应该去@SuperBuilder,并@Getter在课程。使用带有@Singular; 的集合而不是数组。Lombok 的 SuperBuilder 将使用不可变的集合类。使用@NonNull所需的字段。@NoArgsConstructor为子类和序列化框架添加一个。

我认为这是 Lombok 所能获得的最好的结果。你的 linter 可能仍然会发出警告,但至少部分是因为生成的代码对它来说太复杂了。

PS:使用当前的 Lombok edge 版本 1.18.3 或等待 1.18.4 版本@NonNull@SuperBuilder.


查看完整回答
反对 回复 2021-10-13
  • 2 回答
  • 0 关注
  • 226 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信