我有一个项目(ID 3标记),其中包含几十个setter和getter。我正在研究Lombok项目,看看它如何帮助我。一些可以设置的字段有非常严格的要求,可能包括字符编码,位设置,长度检查,字符范围等。我可以使用构建器模式,但可能在某些情况下不需要模式。如果我想使用验证方法和/或类而不是注解,该怎么办?我如何在我的Netbeans项目中访问Lombok的setter以添加这些验证?
djp7away1#
简短的回答是你不能。现在唯一支持的一致性检查是@Nonnull。如果你想要其他的东西,你必须手动编写你的setter。显然,没有工具可以完成你列出的所有检查,通过注解描述它们充其量是麻烦的。有时候,这个feature request可能会有帮助。它可能太粗了,不适合你的需要。很多时候,你需要的只是手动编写一些setter。这个特性对不可变对象更有用,因为它将提供唯一的方法来为生成的构造函数添加验证。
@Nonnull
nwsw7zdq2#
虽然setter上的验证目前还不可能,但**你可以在lombok Builder上进行自定义验证。要做到这一点,你应该覆盖Builder.build方法,并把你的验证放在那里。
@Getter@EqualsAndHashCode@ToString@Builder(builderClassName = "Builder",buildMethodName = "build")public class Customer { private long id; private String name; static class Builder { Customer build() { if (id < 0) { throw new RuntimeException("Invaid id"); } if (Objects.isNull(name)) { throw new RuntimeException("name is null"); } return new Customer(id, name); } }}
@Getter
@EqualsAndHashCode
@ToString
@Builder(builderClassName = "Builder",buildMethodName = "build")
public class Customer {
private long id;
private String name;
static class Builder {
Customer build() {
if (id < 0) {
throw new RuntimeException("Invaid id");
}
if (Objects.isNull(name)) {
throw new RuntimeException("name is null");
return new Customer(id, name);
字符串source and credit
db2dz4w83#
你也可以在一个构造函数上使用@Builder,并在那里添加验证。在构建时,将使用带注解的构造函数。例如:
@Builder
@Getter@EqualsAndHashCode class MyDto { private final String thisCannotBeNull; private final String someOtherValue; private final String thisValueCannotBeNull; private final String someValue2; @Builder public CreateOrderRequestDto(@JsonProperty("thisValueCannotBeNull") final String thisValueCannotBeNull, @JsonProperty("someOtherValue") final String someOtherValue, @JsonProperty("thisValueCannotBeNull") final String someOtherValue, @JsonProperty("someValue2") final String someValue2) { this.thisCannotBeNull = notNull(thisValueCannotBeNull); this.thisValueCannotBeNull = notNull(thisValueCannotBeNull); this.someOtherValue = someOtherValue; this.someValue2 = someValue2; }}
class MyDto {
private final String thisCannotBeNull;
private final String someOtherValue;
private final String thisValueCannotBeNull;
private final String someValue2;
public CreateOrderRequestDto(@JsonProperty("thisValueCannotBeNull") final String thisValueCannotBeNull,
@JsonProperty("someOtherValue") final String someOtherValue,
@JsonProperty("thisValueCannotBeNull") final String someOtherValue,
@JsonProperty("someValue2") final String someValue2) {
this.thisCannotBeNull = notNull(thisValueCannotBeNull);
this.thisValueCannotBeNull = notNull(thisValueCannotBeNull);
this.someOtherValue = someOtherValue;
this.someValue2 = someValue2;
字符串如果你对@JsonProperty不感兴趣,就忽略它。这里的主要思想是构造函数中的notches验证
@JsonProperty
3条答案
按热度按时间djp7away1#
简短的回答是你不能。
现在唯一支持的一致性检查是
@Nonnull
。如果你想要其他的东西,你必须手动编写你的setter。显然,没有工具可以完成你列出的所有检查,通过注解描述它们充其量是麻烦的。有时候,这个feature request可能会有帮助。它可能太粗了,不适合你的需要。很多时候,你需要的只是手动编写一些setter。这个特性对不可变对象更有用,因为它将提供唯一的方法来为生成的构造函数添加验证。
nwsw7zdq2#
虽然setter上的验证目前还不可能,但**你可以在lombok Builder上进行自定义验证。
要做到这一点,你应该覆盖Builder.build方法,并把你的验证放在那里。
字符串
source and credit
db2dz4w83#
你也可以在一个构造函数上使用
@Builder
,并在那里添加验证。在构建时,将使用带注解的构造函数。例如:
字符串
如果你对
@JsonProperty
不感兴趣,就忽略它。这里的主要思想是构造函数中的notches验证