java Builder class 中的其他方法(lombok 注释)
Additional methods in java Builder class (lombok annotation)
所以,我 class 使用 @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();
我的问题是向这个 class 添加一些额外的方法是否是一个好的做法?或者我应该保持原样,在外面做任何业务逻辑??
基本上,可以说,我需要一个辅助方法来设置 myField3 属性,因为我不能只做:
.myField3("value for field 3")
.build()
我需要对 field3 的值执行一些操作,然后将其设置为 MyModel。
那么我可以把这个辅助方法放到这个 class 上吗?
根据 Lombok 的 Builder documentation,
Each listed generated element will be silently skipped if that element already exists (disregarding parameter counts and looking only at names). This includes the builder itself: If that class already exists, lombok will simply start injecting fields and methods inside this already existing class, unless of course the fields / methods to be injected already exist. You may not put any other method (or constructor) generating lombok annotation on a builder class though; for example, you can not put @EqualsAndHashCode on the builder class.
那么我可以把这个辅助方法放到这个class吗?
是的,您可以通过一个最小的构建器来提供与字段同名的方法,即 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;
}
}
}
这是使用您的 class、
的示例
MyModel model = MyModel.builder()
.myField1("value for field 1")
.myField2("value for field 2")
.myField3("value for field 3")
.build();
所以,我 class 使用 @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();
我的问题是向这个 class 添加一些额外的方法是否是一个好的做法?或者我应该保持原样,在外面做任何业务逻辑??
基本上,可以说,我需要一个辅助方法来设置 myField3 属性,因为我不能只做:
.myField3("value for field 3")
.build()
我需要对 field3 的值执行一些操作,然后将其设置为 MyModel。
那么我可以把这个辅助方法放到这个 class 上吗?
根据 Lombok 的 Builder documentation,
Each listed generated element will be silently skipped if that element already exists (disregarding parameter counts and looking only at names). This includes the builder itself: If that class already exists, lombok will simply start injecting fields and methods inside this already existing class, unless of course the fields / methods to be injected already exist. You may not put any other method (or constructor) generating lombok annotation on a builder class though; for example, you can not put @EqualsAndHashCode on the builder class.
那么我可以把这个辅助方法放到这个class吗?
是的,您可以通过一个最小的构建器来提供与字段同名的方法,即 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;
}
}
}
这是使用您的 class、
的示例MyModel model = MyModel.builder()
.myField1("value for field 1")
.myField2("value for field 2")
.myField3("value for field 3")
.build();