Привет, Хабр!
Если вы писали на Java хоть раз, то знаете этот ужас — бесконечные геттеры, сеттеры, конструкторы, да ещё toString() и equals() на закуску. Одной только стандартной обвязки в классах моделей больше, чем самого кода.
Lombok — это библиотека, которая берёт всё это бойлерплейтное безумие и оставляет только чистую суть.
Что делает Lombok?
-
Генерирует геттеры, сеттеры,
toString(),equals()и другие методы автоматически. -
Упрощает создание конструкторов и билдеров.
-
Уменьшает количество кода в разы.
Например:
public class User { private String username; private String email; public User() {} public User(String username, String email) { this.username = username; this.email = email; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", email='" + email + '\'' + '}'; } }
15 строк. Ради двух полей.
То же самое, но с Lombok:
import lombok.*; @Data @AllArgsConstructor @NoArgsConstructor public class User { private String username; private String email; }
И все. Три аннотации заменили 15 строк шаблонного кода.
Lombok использует аннотации, которые на этапе компиляции добавляют в код всю скучную обвязку. Это происходит на уровне APT.
При компиляции Lombok генерирует дополнительные методы прямо в байткод, поэтому на runtime его вообще нет. Это значит, что:
-
IDE может видеть и использовать эти методы.
-
Никаких зависимостей в коде.
-
Скорость работы не страдает.
Но есть и нюансы, например, IDE должна поддерживать Lombok.
Аннотаций Lombok
@Getter и @Setter
Было:
public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Стало:
import lombok.Getter; import lombok.Setter; @Getter @Setter public class User { private String name; }
Теперь getName() и setName() автоматически создаются компилятором.
Но если вдруг нужно только геттер, но без сеттера, можно сделать так:
@Getter public class ImmutableUser { private final String username; }
Теперь username можно читать, но нельзя изменять — удобно для иммутабельных объектов.
@ToString — избавляет от ручного написания toString()
Было:
public class Product { private String name; private double price; @Override public String toString() { return "Product{name='" + name + "', price=" + price + "}"; } }
Стало:
import lombok.ToString; @ToString public class Product { private String name; private double price; }
Теперь System.out.println(product); автоматически выведет что‑то вроде:
Product(name=iPhone, price=999.99)
Можно даже исключить поля из toString():
@ToString(exclude = "password") public class Account { private String username; private String password; }
@EqualsAndHashCode — избавляет от ручного написания equals() и hashCode()
Эта аннотация делает объекты сравнимыми:
import lombok.EqualsAndHashCode; @EqualsAndHashCode public class Customer { private int id; private String name; }
Теперь new Customer(1, "Alice").equals(new Customer(1, "Alice")) вернёт true.
Если нужно исключить поле (например, не учитывать id в сравнении):
@EqualsAndHashCode(exclude = "id") public class Customer { private int id; private String name; }
@Data — универсальная аннотация
Хотите всё сразу? @Data объединяет:
-
@Getter -
@Setter -
@EqualsAndHashCode -
@ToString -
@RequiredArgsConstructor
import lombok.Data; @Data public class Order { private String product; private int quantity; }
Теперь:
-
Геттеры и сеттеры есть.
-
toString()есть. -
equals()иhashCode()тоже есть.
И никаких лишних строк.
Настройка Lombok в проекте
Сначала подключим в Maven. Добавляем в pom.xml:
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> <scope>provided</scope> </dependency> </dependencies>
Подключение в Gradle:
dependencies { compileOnly 'org.projectlombok:lombok:1.18.26' annotationProcessor 'org.projectlombok:lombok:1.18.26' }
Включаем в IntelliJ IDEA:
-
Устанавливаем плагин Lombok (
Preferences → Plugins → Lombok Plugin). -
Включаем аннотации в
Settings → Compiler → Annotation Processors.
Теперь IDE понимает Lombok.
А вы используете Lombok в своих проектах? Или пишете геттеры и toString() в ручную? Делитесь в комментариях.
Разработчикам на Java рекомендую обратить внимание на открытые уроки, которые пройдут в феврале в Otus:
-
12 февраля: «Resilience4j. Bulkhead»
Познакомимся с библиотекой Resilience4j и рассмотрим Bulkhead для защиты приложений от перегрузок. Записаться -
24 февраля: «Resilience4j. RateLimiter»
Познакомимся с библиотекой Resilience4j и рассмотрим RateLimiter для контроля нагрузки и защиты микросервисов. Записаться
ссылка на оригинал статьи https://habr.com/ru/articles/879852/
Добавить комментарий