我有一个存储许多字段的类(原始类型和对象,如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贡献1816条经验 获得超6个赞
如果约束 3 意味着您想限制子类可以做什么(即确保它们永远不会可变),那么这是不可满足的,因为您无法在 Java 中对子类强制执行不变性。如果这意味着“应该可以添加字段”,那么一切都很好。
这就是说,你应该去@SuperBuilder
,并@Getter
在课程。使用带有@Singular
; 的集合而不是数组。Lombok 的 SuperBuilder 将使用不可变的集合类。使用@NonNull
所需的字段。@NoArgsConstructor
为子类和序列化框架添加一个。
我认为这是 Lombok 所能获得的最好的结果。你的 linter 可能仍然会发出警告,但至少部分是因为生成的代码对它来说太复杂了。
PS:使用当前的 Lombok edge 版本 1.18.3 或等待 1.18.4 版本@NonNull
在@SuperBuilder
.
添加回答
举报
0/150
提交
取消