Lombok - как создавать собственные сеттеры и применять их к другим членам в Java - PullRequest
0 голосов
/ 30 октября 2019

Я хотел бы понять, как создать собственный установщик в Lombok и применить его к конкретному члену. У меня есть класс с 100 членами, и для 50 из них у меня есть пользовательский установщик, который проверяет что-то X до того, как я установил значение, и еще 50, у которых есть пользовательский установщик, который проверяет что-то Y до того, как я установил значение. Это можно сделать? это пример, 2 члена, 2 разных установщика, этот код повторяется для всех членов моего класса:

@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);
    }
}

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Основываясь на документации текущей версии (https://projectlombok.org/features/GetterSetter),, похоже, нет способа указать пользовательские проверки для установщика (или получателя). Боюсь, вам придется вручную кодировать каждый установщик.

То же самое относится к экспериментальной функции @ Accessor .

0 голосов
/ 31 октября 2019

Как сказал @ Laf , Lombok в настоящее время не поддерживает эту функцию. Однако вы все еще можете избавиться от некоторого дублированного кода, извлекая логику сеттеров в следующую функцию более высокого порядка:

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);
}

И используя ее таким образом:

public void setTacLacStartUe1(Integer tacLacStartUe1) {
    doSetTacLacStartUe(getTacLacStartUe1(), tacLacStartUe1, it -> this.tacLacStartUe1 = it, EventDocument::setTacLacStartUe1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...