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

我有一个存储许多字段的类(原始类型和对象,如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 错误,即[]对象是可变的。


皈依舞
浏览 227回答 2
2回答

绝地无双

也许你可以看看lombok的Builder

潇湘沐

如果约束 3 意味着您想限制子类可以做什么(即确保它们永远不会可变),那么这是不可满足的,因为您无法在 Java 中对子类强制执行不变性。如果这意味着“应该可以添加字段”,那么一切都很好。这就是说,你应该去@SuperBuilder,并@Getter在课程。使用带有@Singular; 的集合而不是数组。Lombok 的 SuperBuilder 将使用不可变的集合类。使用@NonNull所需的字段。@NoArgsConstructor为子类和序列化框架添加一个。我认为这是 Lombok 所能获得的最好的结果。你的 linter 可能仍然会发出警告,但至少部分是因为生成的代码对它来说太复杂了。PS:使用当前的 Lombok edge 版本 1.18.3 或等待 1.18.4 版本@NonNull在@SuperBuilder.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java