Пропуск одного сеттера / геттера в Ломбоке

232

Я хочу использовать класс данных в Ломбоке. Поскольку в нем около десятка полей, я пометил его @Data, чтобы сгенерировать все сеттеры и геттеры. Однако есть одно специальное поле, для которого я не хочу, чтобы методы доступа были реализованы.

Как Lombok пропускает это поле?

DerMike
источник

Ответы:

415

Вы можете пройти уровень доступа к @Getterи @Setterаннотациям. Это полезно, чтобы сделать методы получения или установки защищенными или частными. Это также может быть использовано для переопределения по умолчанию.

С помощью у @Dataвас есть публичный доступ к методам доступа по умолчанию. Теперь вы можете использовать специальный уровень доступа, NONEчтобы полностью опустить аксессор, например так:

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;
Майкл Пифель
источник
1
Отлично. Если закрытое поле является POJO и также аннотировано @Delegate (), его можно использовать для извлечения набора свойств в отдельный повторно используемый класс. Это может быть полезно для применения одного и того же набора свойств к нескольким классам (своего рода миксин для добавления свойств). Например, миксин, представляющий набор атрибутов, которые могут применяться для моделирования различных элементов XML.
xorcus
У вас есть что-то похожее на пропуск одного поля в строителе?
zt1983811
1
Вы имеете в виду, что атрибут не должен отображаться в конструкторе? Нет, прямо для этого нет ничего. Помните, однако, что это @Builderможет быть применено к функциям и конструкторам, а также к классам, и предлагает установку только тех атрибутов, которые появляются в сигнатуре этой функции.
Майкл Пифель
Он не реализует никакой метод установки и получения для этого свойства, где @Data включает в себя методы установки и получения по умолчанию. который будет исключен путем упоминания AccessLevel.NONE.
Рам
41

Согласно описанию @Data вы можете использовать:

Все сгенерированные методы получения и установки будут открытыми. Чтобы переопределить уровень доступа, аннотируйте поле или класс явной аннотацией @Setter и / или @Getter. Вы также можете использовать эту аннотацию (комбинируя ее с AccessLevel.NONE), чтобы полностью исключить создание метода получения и / или установки.

Марк Роттвил
источник
0

Используйте приведенный ниже код для исключения / исключения из создания сеттера и геттера.

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;

Spring boot 2.3 version, это работает хорошо.

Shakthifuture
источник
Это ничего не добавляет к принятому ответу.
DerMike
-3

Если у вас есть установщик и получатель как частный, он появится в проверках PMD.

Арпит Шарма
источник