Lombok — это библиотека для сокращения кода в классах и расширения функциональности языка Java. Подключается к среде разработки (IDE) или инструменту сборки приложений Maven, Gradle в качестве плагина.
Библиотека получила название в честь индонезийского острова Ломбок, расположенного недалеко от острова Ява. В переводе с индонезийского Lombok означает «перец чили»: по аналогии с приправой, библиотека призвана повысить качество Java-кода.
Зачем нужен Lombok в Java
Java — один из популярных языков, но у него есть несколько недостатков. Один из них — необходимость написания шаблонного кода для геттеров, сеттеров, метода toString() и так далее. Например, Kotlin и Scala также работают поверх JVM, но не нуждаются в шаблонном коде. Это причина их растущей популярности. Использование Lombok позволяет автоматически преобразовать объемный Java-код в оптимизированную и лаконичную структуру, характерную для перечисленных языков.
Также плагин избавляет разработчика от ручного набора однотипных фрагментов кода и предотвращает появление ошибок.
Как работает Lombok
Принцип работы библиотеки основан на использовании аннотаций, которые:
- многократно сокращают шаблонный код;
- экономят время разработчиков;
- улучшают читаемость кода.
Сравним «чистый» Java-код и код, оптимизированный с помощью библиотеки Lombok.
Обычный Java-код | Код, использующий аннотации Lombok |
---|---|
public class Employee { private Integer employeeId; private String name; private String company; private String emailId; public Employee() {} public Employee(Integer employeeId, String name, String company, String emailId) { super(); this.employeeId = employeeId; this.name = name; this.company = company; this.emailId = emailId; } public Integer getEmployeeId() { return employeeId; } public void setEmployeeId(Integer employeeId) { this.employeeId = employeeId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCompany() { return company; } public void setCompany(String company) { this.company = company; } public String getEmailId() { return emailId; } public void setEmailId(String emailId) { this.emailId = emailId; } @Override public String toString() { return «Employee [» + «employeeId=» + employeeId + «, name=» + name + «, » + » company=» + company + «, emailId=» + emailId + «]»; } } | import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @NoArgsConstructor @AllArgsConstructor @ToString @Getter @Setter public class Employee { private Integer employeeId; private String name; private String company; private String emailId; } |
Использование Lombok сокращает код в три раза.
Аннотации в Lombok
Наиболее полезные аннотации в библиотеке:
- @Getter и @Setter — предоставляют геттеры и сеттеры для поля. Могут использоваться как на уровне поля, так и на уровне класса.
- @NoArgsConstructor — используется для создания конструктора без аргументов.
- @AllArgsConstructor — генерирует параметризованный конструктор, который принимает один параметр для каждого поля и инициализирует их с его помощью. Аннотация необходима, если нужно создать объект класса, передав начальные значения полей в конструктор.
- @ToString — переопределяет метод toString() и создает для него реализацию по умолчанию. Она выводит имя класса и поля по порядку, разделяя их запятыми. Можно пропустить отдельные поля, если аннотировать их с помощью @ToString.Exclude.
- @EqualsAndHashCode — применяется для переопределения методов equals() и hashCode().
- @Data — объединяет аннотации @ToString, @Getter, @Setter, @EqualsAndHashCode и @RequiredArgsConstructor в одну. Предоставляет весь код, который обычно используется в классах моделей, например, геттеры для всех полей, сеттеры для всех нефинальных полей, реализацию по умолчанию для toString(), equals() и hashCode(), а также конструктор, который инициализирует все поля класса.
0 комментариев