Пропуск одного установщика / получателя в Lombok

#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 ), чтобы полностью подавить генерацию получателя и / или установщика.