gpt4 book ai didi

java - java Builder 类中的附加方法(lombok 注解)

转载 作者:搜寻专家 更新时间:2023-11-01 02:20:17 24 4
gpt4 key购买 nike

所以,我有一个使用@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。

那么我可以把这个辅助方法放到这个类中吗?

最佳答案

根据 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.

那么我可以把这个辅助方法放到这个类中吗?

是的,您可以通过一个最小的构建器来提供一个与字段同名的方法,即 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 - java Builder 类中的附加方法(lombok 注解),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47185622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com