#java #lombok
#java #lombok
Вопрос:
Я хочу использовать класс данных в Lombok. Поскольку в нем около дюжины полей, я аннотировал его, @Data
чтобы сгенерировать все сеттеры и геттеры. Однако есть одно специальное поле, для которого я не хочу, чтобы средства доступа были реализованы.
Как Lombok опускает это поле?
Ответ №1:
Вы можете передать уровень доступа к @Getter
@Setter
аннотациям and . Это полезно, чтобы сделать геттеры или сеттеры защищенными или частными. Его также можно использовать для переопределения значения по умолчанию.
При @Data
этом у вас есть общедоступный доступ к средствам доступа по умолчанию. Теперь вы можете использовать специальный уровень доступа NONE
, чтобы полностью исключить средство доступа, например:
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;
Комментарии:
1. Идеальный. Если частное поле является POJO и также помечено @Delegate() , его можно использовать для извлечения набора свойств в отдельный класс многократного использования. Это может быть полезно для того, чтобы один и тот же набор свойств применялся к нескольким классам (своего рода смесь для добавления свойств). Например, mixin, представляющий набор атрибутов, которые могут применяться для моделирования различных элементов XML.
2. Есть ли у вас что-то похожее на пропуск одного поля в builder?
3. Вы имеете в виду, что атрибут не должен отображаться в сборщике? Нет, для этого нет ничего прямого. Помните, однако, что
@Builder
это может быть применено к функциям и конструкторам, а также к классам, и предлагать устанавливать только те атрибуты, которые появляются в сигнатуре этой функции.4. Он не реализует какой-либо установщик и получатель для этого свойства, где @Data по умолчанию включает установщики и получатели. который был бы исключен путем упоминания
AccessLevel.NONE
.
Ответ №2:
Согласно @Data description вы можете использовать:
Все сгенерированные геттеры и сеттеры будут общедоступными. Чтобы переопределить уровень доступа, аннотируйте поле или класс явной аннотацией @Setter и / или @Getter . Вы также можете использовать эту аннотацию (объединив ее с AccessLevel.NONE ), чтобы полностью подавить генерацию получателя и / или установщика.