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


232

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

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

Ответы:


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, это работает хорошо.


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.