Lombok, базовые аннотации
Аннотация @EqualsAndHashCode
Эта аннотация автоматически генерирует методы equals() и hashCode(), которые используются для сравнения объектов.
Пример:
Как это работает:
Lombok генерирует методы equals() и hashCode(), которые сравнивают объекты по их полям. Например:
Нюансы:
Можно исключить поля из сравнения с помощью параметра exclude:
Можно включить только определенные поля с помощью параметра of:
Как Lombok работает под капотом?
Lombok использует механизм обработки аннотаций (Annotation Processing) на этапе компиляции. Вот как это работает:
Компиляция Java-кода:
Когда вы компилируете код, компилятор Java (javac) запускает процессоры аннотаций.
Lombok подключается как процессор аннотаций.
Генерация кода:
Lombok анализирует аннотации в вашем коде.
На основе аннотаций Lombok генерирует дополнительные методы (например, геттеры, сеттеры, toString()).
Добавление в байт-код:
Сгенерированные методы добавляются в байт-код (.class файлы), но не отображаются в исходном коде.
Пример байт-кода:
Если вы используете @Getter, Lombok добавит методы getName() и getAge() в байт-код, но в исходном коде их не будет.
Нюансы использования Lombok
Зависимость от Lombok:
Все разработчики проекта должны использовать Lombok, иначе код не скомпилируется.
Убедитесь, что Lombok настроен в вашей IDE.
Совместимость с другими библиотеками:
Lombok может конфликтовать с некоторыми библиотеками, например, с Jackson или Hibernate. В таких случаях нужно быть осторожным с аннотациями.
Отладка:
Поскольку сгенерированный код не отображается в исходниках, отладка может быть сложнее. Убедитесь, что ваша IDE поддерживает Lombok.
Кастомизация:
Lombok предоставляет множество параметров для настройки аннотаций, таких как уровень доступа, исключение полей и т.д.
#Java #Training #Spring #Lombok #EqualsAndHashCode
Аннотация @EqualsAndHashCode
Эта аннотация автоматически генерирует методы equals() и hashCode(), которые используются для сравнения объектов.
Пример:
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
private String name;
private int age;
}
Как это работает:
Lombok генерирует методы equals() и hashCode(), которые сравнивают объекты по их полям. Например:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
Нюансы:
Можно исключить поля из сравнения с помощью параметра exclude:
@EqualsAndHashCode(exclude = "age")
public class User {
private String name;
private int age;
}
Можно включить только определенные поля с помощью параметра of:
@EqualsAndHashCode(of = "name")
public class User {
private String name;
private int age;
}
Как Lombok работает под капотом?
Lombok использует механизм обработки аннотаций (Annotation Processing) на этапе компиляции. Вот как это работает:
Компиляция Java-кода:
Когда вы компилируете код, компилятор Java (javac) запускает процессоры аннотаций.
Lombok подключается как процессор аннотаций.
Генерация кода:
Lombok анализирует аннотации в вашем коде.
На основе аннотаций Lombok генерирует дополнительные методы (например, геттеры, сеттеры, toString()).
Добавление в байт-код:
Сгенерированные методы добавляются в байт-код (.class файлы), но не отображаются в исходном коде.
Пример байт-кода:
Если вы используете @Getter, Lombok добавит методы getName() и getAge() в байт-код, но в исходном коде их не будет.
Нюансы использования Lombok
Зависимость от Lombok:
Все разработчики проекта должны использовать Lombok, иначе код не скомпилируется.
Убедитесь, что Lombok настроен в вашей IDE.
Совместимость с другими библиотеками:
Lombok может конфликтовать с некоторыми библиотеками, например, с Jackson или Hibernate. В таких случаях нужно быть осторожным с аннотациями.
Отладка:
Поскольку сгенерированный код не отображается в исходниках, отладка может быть сложнее. Убедитесь, что ваша IDE поддерживает Lombok.
Кастомизация:
Lombok предоставляет множество параметров для настройки аннотаций, таких как уровень доступа, исключение полей и т.д.
#Java #Training #Spring #Lombok #EqualsAndHashCode