我有以下课程
@Builder
public class User {
private String userName;
private String email;
private String userEmail;
}
我想根据
userEmail
和 userName
获得的输入设置值 email
。 Builder
可以吗?我不想直接设置userEmail
的值。
示例
this.userEmail = userName + email
理想情况下,我希望在构造函数中完成一次
我目前正在构建这样的对象,但我不确定如何初始化
userEmail
字段。
User.builder()
.userName("sample-username)
.email("sample-email")
.build();
虽然您给出的示例看起来很人为(将名称与电子邮件连接有任何实际用途吗?),您可以使用 Lombok 的 GetterLazy
来自医生,
你可以让 lombok 生成一个 getter,它将在第一次调用该 getter 时计算一次值,并从那时起缓存它。 [...] 要使用此功能,请创建一个私有最终变量,使用运行成本较高的表达式对其进行初始化,并使用 @Getter(lazy=true) 注释您的字段。该字段将对代码的其余部分隐藏,并且当第一次调用 getter 时,表达式的计算次数不会超过一次。
@Builder
private static class User {
private String userName;
private String email;
@Getter(lazy=true)
private final String userEmail = userName + email;
}
这样,
userEmail
字段将无法通过构建器设置。
请注意,该字段只会在调用 getter (getUserEmail()
) 时才会初始化,而不是在直接访问该字段时初始化。