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

时间:2018-09-27 03:08:48

标签: java oop final lombok

我有一个存储许多字段的类(原始类型和对象,例如StringList)。创建对象时,所有字段都是必填字段,并且只需设置一次。

在确保满足以下条件的情况下,使用Lombok实例化此方法的正确方法是什么:

1)没有警告,因为设置员可能返回可变对象。

2)不要使用构造函数实例化所有字段,因为字段数可以大于10。

3)能够继承和扩展此类,其中每个子类将仅添加更多字段,而无其他操作。

4)易于序列化(即具有一个空的公共构造函数)。

class ParentData {
    int id;
    String name;
}

class ChildData extends ParentData {
    long childId;
    long[] friendId;
    String[] friendNames;
}

当前,即使我将字段设置为private final,也会收到findBugs错误,表明[]对象是可变的。

2 个答案:

答案 0 :(得分:0)

也许您可以看看Builder in lombok

答案 1 :(得分:0)

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

也就是说,您应该在课程上同时使用@SuperBuilder@Getter。代替数组,使用带有@Singular的集合;龙目岛的SuperBuilder随后将使用不可变的集合类。 在必填字段上使用@NonNull。 为子类和序列化框架添加@NoArgsConstructor

我认为这是龙目岛最好的选择。您的linter可能仍然会发出警告,但至少部分是因为所生成的代码对其而言太复杂了。

PS:使用当前的Lombok Edge版本1.18.3或等待{8.4}的1.18.4发行,以支持@NonNull中的@SuperBuilder