如何无样板代码初始化类及依赖字段(含Lombok场景)
解决方案:用Lombok实现无样板代码的字段自动初始化
既然你已经在项目中使用Lombok,刚好有几个非常贴合需求的标准实践方案,完全不用手写构造函数就能让PivotModel实例化时自动初始化所有依赖字段为新对象,全程零样板代码:
方案1:字段初始化表达式 + @Data注解
这是最直接简单的方案,直接在字段定义时指定初始化表达式,配合Lombok的@Data注解生成必要的getter/setter、toString等方法:
@Data public class PivotModel { // 直接在字段声明时初始化新对象 private Model1 model1 = new Model1(); private Model2 model2 = new Model2(); private Cell1 cell1 = new Cell1(); private Cell2 cell2 = new Cell2(); }
当你执行PivotModel pivotModel = new PivotModel()时,所有依赖字段都会自动被实例化为新对象,完全不需要手动编写构造函数。
方案2:@Builder配合默认值(适合需要灵活构建的场景)
如果后续需要偶尔自定义某个字段的实例(比如替换成特定配置的Model1),可以结合@Builder注解,同时保留字段的默认初始化逻辑:
@Data @Builder(toBuilder = true) @NoArgsConstructor @AllArgsConstructor public class PivotModel { private Model1 model1 = new Model1(); private Model2 model2 = new Model2(); private Cell1 cell1 = new Cell1(); private Cell2 cell2 = new Cell2(); }
这个方案的好处是:
- 既可以用
new PivotModel()自动初始化所有字段 - 也可以用构建器模式灵活覆盖特定字段,比如:
PivotModel.builder().model1(customModelInstance).build()
方案3:不可变对象场景的优化(可选)
如果你希望这些依赖字段是不可变的(实例化后不允许修改),可以结合@FieldDefaults注解把字段设为final,同时保留初始化表达式:
@Data @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) public class PivotModel { private Model1 model1 = new Model1(); private Model2 model2 = new Model2(); private Cell1 cell1 = new Cell1(); private Cell2 cell2 = new Cell2(); }
这样所有字段会被设为私有且不可变,实例化后无法修改,适合不需要变更依赖的场景。
以上都是Lombok生态中的标准实践,完全满足你“无样板代码”的需求,不用手动编写任何构造函数就能实现目标。
内容的提问来源于stack exchange,提问作者GrandPa
相关产品推荐
相关产品推荐

