Lombok @Builder 不创建不可变对象?

2024-05-23

在很多网站上,我看到 lombok @Builder 可以用来创建不可变的对象(https://www.baeldung.com/lombok-builder-singular https://www.baeldung.com/lombok-builder-singular)而且很多网站都说 Builder 模式主要用于创建不可变对象。

TimeIntervalData td = TimeIntervalData.builder().endTime("12:00").startTime("10:00").build();
td.setEndTime("14:00");
System.out.println(td.getEndTime());

我不确定如何在使用构建器构建的对象上使用设置器。我在这里缺少什么吗?


是的,lombok 构建器不会创建不可变实例,util 用户将类中的参数定义为final,根据文档lombok.builder https://projectlombok.org/features/Builder @Builder允许您自动生成使您的类可以使用以下代码实例化所需的代码:

Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();

根据文档,它只是以外部类中提到的相同方式创建具有相同属性的内部静态类

用 @Builder 注解的方法(从现在开始称为目标)会导致生成以下 7 个东西:

  • 名为 FooBuilder 的内部静态类,具有与静态方法相同的类型参数(称为构建器)。
  • 在构建器中:目标的每个参数都有一个私有非静态非最终字段。
  • 在构建器中:包私有无参数空构造函数。
  • 在构建器中:目标的每个参数都有一个类似“setter”的方法:它与该参数具有相同的类型和相同的名称。它返回构建器本身,以便可以链接设置器调用
  • 在构建器中:调用该方法的 build() 方法,传入每个字段。它返回与目标返回相同的类型
  • 在构建器中:一个合理的 toString() 实现。
  • 在包含目标的类中: builder() 方法,用于创建构建器的新实例。

但使用@单数 https://projectlombok.org/features/Builder with @Builder集合属性的注释使它们成为单例

通过使用 @Singular 注释来注释参数之一(如果使用 @Builder 注释方法或构造函数)或字段(如果使用 @Builder 注释类),lombok 会将该构建器节点视为集合,并生成 2 'adder ' 方法而不是 'setter' 方法。一种将单个元素添加到集合中,另一种将另一个集合的所有元素添加到集合中。不会生成仅设置集合(替换已添加的任何内容)的设置器。

@Singular 只能应用于 lombok 已知的集合类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lombok @Builder 不创建不可变对象? 的相关文章

随机推荐