You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lombok toBuilder实现嵌套类深拷贝,有无更简洁方案?

实体类定义

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder(toBuilder = true)
public class Example {
  public ExampleTwo exampleTwo;

  @lombok.Data
  @AllArgsConstructor
  @NoArgsConstructor
  @Builder(toBuilder = true)
  public static class ExampleTwo {
      private SomeData someData;
      private AnotherField anotherField;
  }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder(toBuilder = true)
public class SomeData {
   private String specialId;
   private String firstName;
   private String lastName;
}

问题场景

已获取一个Example实例并通过深拷贝生成副本,需要修改副本中嵌套类SomeData的specialId字段,当前实现需要多步创建中间对象,希望得到更简洁易读的实现,且避免使用Serializable、Cloneable,第三方库作为最后选择。

简洁实现方案

方案1:链式嵌套调用toBuilder

无需创建中间变量,直接通过嵌套的toBuilder调用完成修改,代码更紧凑:

Example duplicateExample = example.toBuilder()
    .exampleTwo(example.getExampleTwo().toBuilder()
        .someData(example.getExampleTwo().getSomeData().toBuilder()
            .specialId("SPE_1")
            .build())
        .build())
    .build();

这种写法完全基于Lombok自带的toBuilder功能,没有引入额外依赖,逻辑连贯,可读性也较好。

方案2:在实体类中封装便捷修改方法

如果需要频繁修改这个字段,可以在Example类中封装一个专用的修改方法,把嵌套修改的逻辑隐藏起来,外部调用更简洁:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder(toBuilder = true)
public class Example {
  public ExampleTwo exampleTwo;

  // 添加便捷修改方法
  public Example withSpecialId(String newSpecialId) {
      return this.toBuilder()
          .exampleTwo(this.exampleTwo.toBuilder()
              .someData(this.exampleTwo.getSomeData().toBuilder()
                  .specialId(newSpecialId)
                  .build())
              .build())
          .build();
  }

  // 内部类定义不变
  @lombok.Data
  @AllArgsConstructor
  @NoArgsConstructor
  @Builder(toBuilder = true)
  public static class ExampleTwo {
      private SomeData someData;
      private AnotherField anotherField;
  }
}

之后只需一行代码即可完成修改:

Example duplicateExample = example.withSpecialId("SPE_1");

这种方式把复杂的嵌套修改逻辑封装在实体类内部,外部调用更直观,也符合封装的设计原则。

内容的提问来源于stack exchange,提问作者Sophie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:55:15