java Builder 类中的附加方法(lombok 注释)
Posted
技术标签:
【中文标题】java Builder 类中的附加方法(lombok 注释)【英文标题】:Additional methods in java Builder class (lombok annotation) 【发布时间】:2018-04-21 11:44:40 【问题描述】:所以,我有一个使用@Builder lombok 注释的类。 这就是它的外观和我的使用方式:
import lombok.Builder;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonProperty;
@Data
@Builder
public class MyModel
@JsonProperty(value = "myField1")
private String myField1;
@JsonProperty(value = "myField2")
private String myField2;
@JsonProperty(value = "myField3")
private String myField3;
//This is how I use it:
MyModel model = MyModel.builder()
.myField1("value for field 1")
.myField2("value for field 2")
.build();
我的问题是向这个类添加一些额外的方法是否是一个好习惯?或者我应该保持原样并在外面做任何业务逻辑??
基本上,可以说,我需要一个辅助方法来设置 myField3 属性,因为我不能这样做:
.myField3("value for field 3")
.build()
我需要对 field3 的值执行一些操作,然后将其设置为 MyModel。
那么我可以把这个辅助方法放到这个类中吗?
【问题讨论】:
【参考方案1】:根据龙目岛的建设者documentation,
如果该元素已经存在,则每个列出的生成元素都将被静默跳过(忽略参数计数并仅查看名称)。这包括构建器本身:如果该类已经存在,lombok 将简单地开始在这个已经存在的类中注入字段和方法,当然,除非要注入的字段/方法已经存在。但是,您不能将任何其他生成 lombok 注释的方法(或构造函数)放在构建器类上;例如,您不能将@EqualsAndHashCode 放在构建器类上。
那么我可以把这个辅助方法放到这个类中吗?
是的,您可以通过一个最小的构建器来提供与字段同名的方法,即myField3
。可以将业务逻辑添加到此方法中。这是一个简单的示例,其中“Hello”被添加到 setter 提供的值之前,
@Data
@Builder
public class MyModel
private String myField1;
private String myField2;
private String myField3;
public static class MyModelBuilder
public MyModelBuilder myField3(String myField3)
this.myField3 = "Hello " + myField3;
return this;
这是一个使用你的类的例子,
MyModel model = MyModel.builder()
.myField1("value for field 1")
.myField2("value for field 2")
.myField3("value for field 3")
.build();
【讨论】:
以上是关于java Builder 类中的附加方法(lombok 注释)的主要内容,如果未能解决你的问题,请参考以下文章
需要多个参数输入时-----------------考虑使用变种的Builder模式