Если вы писали на Java хоть раз, то знаете этот ужас — бесконечные геттеры, сеттеры, конструкторы, да ещё toString() и equals() на закуску. Одной только стандартной обвязки в классах моделей больше, чем самого кода.
Lombok — это библиотека, которая берёт всё это бойлерплейтное безумие и оставляет только чистую суть.
Что делает Lombok?
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 его вообще нет. Это значит, что:
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 можно читать, но нельзя изменять — удобно для иммутабельных объектов.
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;
}
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
public class Order {
private String product;
private int quantity;
}
Теперь:
<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:
habr.com
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 может видеть и использовать эти методы.
- Никаких зависимостей в коде.
- Скорость работы не страдает.
Аннотаций 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
@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.

Lombok в Java: избавляемся от бойлерплейта
Привет, Хабр! Если вы писали на Java хоть раз, то знаете этот ужас — бесконечные геттеры , сеттеры , конструкторы , да ещё toString() и equals() на закуску. Одной только...
