@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class RegistrationRequest {
private String email;
private String emailRepeat;
private String password;
private String passwordRepeat;
}
java prettyprint-override">public class SomeTestUtils {
public static final String DEFAULT_EMAIL = "foo@bar.com";
public static final String DEFAULT_EMAIL_REPEAT = "foo@bar.com";
public static final String DEFAULT_PASSWORD = "my-password";
public static final String DEFAULT_PASSWORD_REPEAT = "my-password";
@Builder(builderMethodName = "aRegistrationRequest", setterPrefix = "with")
public static RegistrationRequest buildRegistrationRequest(String email, String emailRepeat, String password, String passwordRepeat) {
final RegistrationRequest request = new RegistrationRequest();
request.setEmail(email);
request.setEmailRepeat(emailRepeat);
request.setPasswort(password);
return request;
}
}
SomeTestUtils.aRegistrationRequest()
.withEmail("foo@bar.com")
.withEmailRepeat("foo@bar.com")
.withPassword("my-password")
.withPasswordRepeat("my-password")
.build();
但是现在我想为任何未显式设置的字段提供默认值。因此,如果我这样做了,那么将创建一个具有所有默认值的对象:
SomeTestUtils.aRegistrationRequest().build();
Lombok开发人员:
你不能,不是直接的。在lombok完成它的任务之前,代码需要是语法上有效的java,而且没有一种可行的方法(至少,我们从未想出可以接受的方法)来用java语法编写您想要的内容。这些事情根本行不通:
/* 1 */ void foo(int param = 5) {}
/* 2 */ void foo(@DefaultValue(5) int param) {}
/* 3 */ void foo(@DefaultValue("5") int param) {}
/* 4 */ void foo(int param) {
defaultValues: {
param = 5;
}
}
@IntDefaultValue
、@StringDefaultValue
等,但是[A]只允许您涵盖这些类型的原语、字符串、类
值、枚举和数组,而不包括其他内容,[B]意味着您只能提供编译时常量。这限制太大了。final
的烦人习惯相冲突(如果您是这样的人,我建议您不要这样做。如果您讨厌变异params,请添加一个linting或IDE规则来防止它,并从代码中删除这些杂乱)。输入DefaultValues:
参数也很容易,您将获得零个自动完成帮助。@Builder void foo(Integer x) {
if (x == null) x = 5;
// carry on with the code as normal
}
@Builder void foo(Integer paramIn) {
int param == paramIn == null ? 5 : paramIn;
// carry on as normal. Woe is you if you use paramIn.
}
我正在使用龙目岛的建设者。将默认值分配给我试图使用的一些变量 @建筑商。违约 但问题是,在使用上述注释时,我不再能够通过生成器初始化该值,因为编译器在尝试通过生成器初始化变量时说无法解析方法。 所以,本质上我要寻找的是一种设置默认值的方法,并且在通过构建器启动时仍然能够覆盖。
我想有一种简单的方法来构建测试数据,并发现生成器模式非常适合这里描述的情况。然而,为了减少组件测试中的样板代码,甚至更多,我发现来自龙目岛项目的@Builder是一个很好的候选人。然而,我找不到任何关于如何在方法上使用它的留档或在线示例。我想在某种工厂方法上使用,因为我不能对实现进行任何更改。 有人能举例说明如何在方法上实际使用?
问题内容: 我正在将Lombok项目与Spring Data JPA一起使用。有什么方法可以将Lombok 与JPA默认构造函数连接? 码: 据我所知,JPA需要默认的构造函数,该构造函数被注解覆盖。有什么解决方法吗? 这段代码给我错误: 问题答案: 更新 根据反馈和John的回答,我已更新了不再使用or的答案,而是通过和创建访问器和变量,通过创建默认构造函数via,最后我们创建了构建器通过via
我使用默认构造函数从子类中设置recordId的值,最初没有使用lombok。最终我决定在这里使用构建器,但现在的问题是lombok构建器在内部覆盖了我的默认构建器,因此从未设置值。
我正在使用lombok@Builder。当我将注释放在类上时,生成公共方法。但是我想创建私有的方法。不幸的是,注释没有选项。我该怎么办?
我使用的是IntelliJ14,而我的机器已经安装了JDK7。然而,每次创建新的项目,语言水平是5。 虽然我可以通过转到项目设置->项目->项目语言级别和项目设置->模块->[模块名称]->源->语言级别来进行更改,但是对于每个项目都需要时间来做那件事。 IntelliJ是否可以自动检测我的JDK并选择正确的默认语言级别,或者有一个默认的语言级别设置?