[在许多站点中,我看到lombok @Builder可用于在此处创建不可变对象(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());
我不确定如何在使用构建器构建的对象上使用setter。我在这里缺少什么吗?
是,在用户将类中的参数定义为final
的情况下,lombok构建器将不会创建不可变的实例,根据lombok.builder @Builder
中的文档,您可以自动生成使类可实例化的代码,例如:
Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();
根据文档,它只是以与外部类中提到的相同的方式创建具有相同属性的内部静态类
用@Builder注释的方法(从现在开始称为目标)将生成以下7件事:
但是将@Singular与@Builder
批注一起用于集合属性会使它们成为单例
通过使用@Singular注释对参数之一(如果使用@Builder注释方法或构造函数)或字段(如果使用@Builder注释类,则lombok会将该生成器节点视为集合,并生成2使用“加法”方法而不是“设置”方法。一个将单个元素添加到集合中,另一个将另一个集合的所有元素添加到集合中。不会生成仅设置集合(替换已添加的内容)的设置器。
@@ Singular仅可应用于lombok已知的集合类型。
主要用于创建不可变对象
此说法不正确。主要目的是减少样板代码。使用builder创建的对象更紧凑,更易于编写和阅读。
当您具有1-2个属性时,builder可能会处于劣势,与通过构造函数传递参数相比,builder可能会使代码的可读性降低。
因此,何时使用或不使用生成器是一个问题。
对于设置员:如果需要设置员,可以通过@ Data
注释生成它们。