Lombok-如何在java中创建自定义setter并应用于不同的成员
我想了解如何在Lombok中创建自定义setter,并在特定成员上应用setter。我有一个有100个成员的类,其中50个成员有一个自定义setter,在我设置值之前检查X,另50个成员有一个自定义setter,在我设置值之前检查Y。能做到吗? 这是一个例子, 2名成员2名不同的设定者, 此代码对我班的所有成员重复:Lombok-如何在java中创建自定义setter并应用于不同的成员,java,lombok,Java,Lombok,我想了解如何在Lombok中创建自定义setter,并在特定成员上应用setter。我有一个有100个成员的类,其中50个成员有一个自定义setter,在我设置值之前检查X,另50个成员有一个自定义setter,在我设置值之前检查Y。能做到吗? 这是一个例子, 2名成员2名不同的设定者, 此代码对我班的所有成员重复: @JsonProperty("TAC_LAC_Start_UE1") private Integer tacLacStartUe1; @JsonProperty("TAC_LAC
@JsonProperty("TAC_LAC_Start_UE1")
private Integer tacLacStartUe1;
@JsonProperty("TAC_LAC_Start_UE2")
private Integer tacLacStartUe2;
@Override
public void setTacLacStartUe1(Integer tacLacStartUe1) {
if (Objects.equals(getTacLacStartUe1(), tacLacStartUe1)) {
return;
}
this.tacLacStartUe1 = tacLacStartUe1;
if (DocKind.ORIG == docKind) {
((EventDocument) prepareDirtyDocument()).setTacLacStartUe1(tacLacStartUe1);
}
}
@Override
public Integer getTacLacStartUe2() {
return tacLacStartUe2;
}
@Override
public void setTacLacStartUe2(Integer tacLacStartUe2) {
if (Objects.equals(getTacLacStartUe2(), tacLacStartUe2)) {
return;
}
this.tacLacStartUe2 = tacLacStartUe2;
if (DocKind.ORIG == docKind) {
((EventDocument) prepareDirtyDocument()).setTacLacStartUe2(tacLacStartUe2);
}
}
基于当前版本的文档(),它似乎没有包含为setter(或getter)指定自定义检查的方法。我担心您将不得不手动为每个setter编写代码 这同样适用于该功能。如前所述,Lombok目前不支持该功能。但是,通过将setters逻辑提取到以下高阶函数,仍然可以消除一些重复代码:
private void doSetTacLacStartUe(
Integer oldValue,
Integer newValue,
Consumer<Integer> setter,
BiConsumer<EventDocument, Integer> eventDocumentUpdater
) {
if (Objects.equals(oldValue, newValue)) return;
setter.accept(newValue);
if (DocKind.ORIG == docKind)
eventDocumentUpdater.accept((EventDocument) prepareDirtyDocument(), newValue);
}
我不知道你在问什么。什么意义上的“习俗”?向我们展示您想要生成的代码示例,我们将告诉您是否可能。“我有一个拥有100个成员的类”Lombok与否,这听起来像是一个糟糕的设计我同意,但我不能更改设计。。我只是想要一种使用Lombok或其他第三方简化getter和setter的方法…我编辑我的问题您可以尝试创建自定义Lombok注释。谢谢,我可以创建多个自定义setter并将它们应用于我的类的特定成员吗?
public void setTacLacStartUe1(Integer tacLacStartUe1) {
doSetTacLacStartUe(getTacLacStartUe1(), tacLacStartUe1, it -> this.tacLacStartUe1 = it, EventDocument::setTacLacStartUe1);
}