java 在嵌套类中使用lombok toBuilder进行深度复制-更干净的方式?

km0tfn4u  于 2023-01-19  发布在  Java
关注(0)|答案(1)|浏览(210)
@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。

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

你有没有想过不经过这些额外的步骤就能让它更干净的方法?我希望它更容易阅读。我避免了Serializable实现,并将其声明为一个Cloneable接口,因为我已经阅读了避免这些的方法。最后的办法是使用库。

fhity93d

fhity93d1#

@With可能会有所帮助:

Example example = Example.builder().build();
Example.ExampleTwo exampleTwo = example.getExampleTwo();
SomeData someData = exampleTwo.getSomeData();

return example.withExampleTwo(
        exampleTwo.withSomeData(
                someData.withSpecialId("SPE_1")
        )
);

相关问题