Исключение поля из @AllArgsConstructor в Java с Lombok

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если хотите исключить поле из @AllArgsConstructor в Lombok, примените комбинацию @NoArgsConstructor и @RequiredArgsConstructor. Необходимые поля можно пометить как final или добавить к ним аннотацию @NonNull. Такие поля будут включены в @RequiredArgsConstructor. Чтобы поле не попадало в автоматически создаваемый конструктор, можно создать собственный конструктор и не включать туда данное поле.

Java
Скопировать код
@Getter
@RequiredArgsConstructor
public class YourClass {
    private final int criticalField1; // Обязательное поле
    @NonNull private String crucialField2; // Тоже включено
    private int excludedField; // Исключено из автоматически созданного конструктора

    public YourClass(int criticalField1, String crucialField2, int yourField) {
        this.criticalField1 = criticalField1;
        this.crucialField2 = crucialField2;
        // Поле excludedField остаётся без внимания.
    }
}

excludedField обрабатывается только в самописном конструкторе.

Кинга Идем в IT: пошаговый план для смены профессии

Выбор между изменяемыми и неизменяемыми полями

Поля с модификатором final или аннотацией @NonNull включаются в @RequiredArgsConstructor и остаются неизменяемыми, что обеспечивает надежность кода.

Если вам нужны изменяемые поля, аннотация @Builder обеспечивает необходимую гибкость для их настройки, не нарушая при этом потокобезопасность.

Инициализация: включённые, исключённые и встроенные поля

Необходимо учитывать разные стратегии инициализации полей в Lombok. Если поле final инициализируется при объявлении, оно не будет включено в конструктор, создаваемый @AllArgsConstructor:

Java
Скопировать код
@Getter
@AllArgsConstructor
public class YourClass {
    private final int compulsoryField1;
    @NonNull private String mustHaveField2;
    private final int leftOutField = 404; // Исключено @AllArgsConstructor
}

Поле leftOutField исключено из конструктора, так как оно уже инициализировано при объявлении.

Использование @Builder для полного контроля

Если @RequiredArgsConstructor не отвечает всем требованиям, @Builder предоставляет более гибкий контроль:

Java
Скопировать код
@Getter
@Builder
public class MyClass {
    private int requiredField1;
    private String neededField2;
    // leftOutField исключено.

// Создаём экземпляр класса со строителем.
MyClass mc = MyClass.builder().requiredField1(123).neededField2("Hello").build();

С его помощью можно управлять комбинацией полей при создании объектов.

Оставайтесь в курсе и используйте все возможности Lombok

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

Визуализация

Представьте, что ваш набор инструментов для Java (🧰) не должен включать один определённый инструмент (🛠).

Markdown
Скопировать код
`@AllArgsConstructor` = 🧰 (Весь комплект)
Java
Скопировать код
@AllArgsConstructor(exclude="screwdriver") // 🛠 – это инструмент, который мы оставляем за бортом

Таким образом, вы формируете нужный набор инструментов, исключая ненужные.

Markdown
Скопировать код
Итоговый набор: 🧰🔧🔩🔨❌
// @AllArgsConstructor создаст все, кроме отвёртки.

Это наглядная иллюстрация исключения поля с помощью @AllArgsConstructor.

Комбинирование различных подходов в Lombok

В сложных ситуациях можно совмещать разные стратегии и аннотации Lombok при инициализации полей:

  1. Различная инициализация полей: Инициализация полей через конструктор не всегда обязательна, возможны значения по умолчанию при объявлении поля.

  2. Выборочное использование строителя: @Builder.Default обеспечивает установку значений по умолчанию, оставляя при этом гибкость для индивидуальных экземпляров класса.

  3. Квази-конструкторы: Фабричные методы позволяют задавать значения после создания экземпляра класса, если это требуется.

  4. Комбинирование аннотаций: Применение @NoArgsConstructor и @RequiredArgsConstructor параллельно создаёт широкие возможности для настройки поведения полей.

Оставайтесь на связи с Lombok

Поддерживайте контакт с Lombok-сообществом. Отзывы пользователей способствуют развитию новых функций, таких как @SomeArgsConstructor, и улучшению библиотеки.

Полезные материалы

  1. Проект Lombok: Уменьшение boilerplate-кода в Java — Как Lombok упрощает Java-разработку.
  2. Lombok @NoArgsConstructor, @RequiredArgsConstructor и @AllArgsConstructor — Подробное руководство по использованию конструкторов в Lombok.
  3. Видеоурок на YouTube: Обзор конструкторов Lombok — Подробное объяснение работы с конструкторами в Lombok.
  4. Настройка аннотаций конструктора Lombok — Гибкость аннотаций конструкторов Lombok.
  5. Java Lombok и его альтернативы — Инструментарий Lombok и библиотеки схожего назначения.
  6. Официальный гид: Введение в проект Lombok — Официальное руководство по началу работы с Lombok.
Свежие материалы