java Builder类中的其他方法(lombok注释)

时间:2017-11-08 17:06:13

标签: java annotations builder lombok java-annotations

所以,我有使用@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 个答案:

答案 0 :(得分:5)

根据龙目岛的构建器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();