我有一个项目(ID3 标记),其中包含数十个 setter 和 getter。我正在调查龙目岛项目,看看它对我有何帮助。
一些可以设置的字段有非常严格的要求,包括字符编码、位设置、长度检查、字符范围等等。我可以使用构建器模式,但是,在某些情况下可能不需要该模式。如果我想使用验证方法和/或类而不是注释怎么办?如何在 Netbeans 项目中访问 Lombok 的 setter 来添加这些验证?
简短的回答是你不能。
现在唯一支持的一致性检查是
@Nonnull
。如果您想要其他东西,您必须手动编写设置器。显然,没有任何工具可以完成您列出的所有检查,并且通过注释来描述它们充其量也很麻烦。
有时,这个功能请求会有所帮助。它可能太粗粒度,无法满足您的需求。很多时候,您所需要的只是手动编写一些设置器。此功能对于不可变对象更有用,因为它将提供向生成的构造函数添加验证的唯一方法。
虽然目前无法对 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);
}
}
}
您还可以在构造函数上使用
@Builder
并在其中添加验证。
构建时将使用带注释的构造函数。
示例:
@Getter
@EqualsAndHashCode
class MyDto {
private final String thisCannotBeNull;
private final String someOtherValue;
private final String thisValueCannotBeNull;
private final String someValue2;
@Builder
public MyDto(@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
。这里的主要思想是构造函数中的 notNull 验证