Библиотека Lombok для Java
Рассмотрим полезную библиотеку Lombok. Давайте представим, что у нас есть самый обычный класс на Java:
package ru.otus; import java.util.Objects; public class Person { private final String firstName; private final String lastName; public Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public static PersonBuilder builder() { return new PersonBuilder(); } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return Objects.equals(firstName, person.firstName) && Objects.equals(lastName, person.lastName); } @Override public int hashCode() { return Objects.hash(firstName, lastName); } @Override public String toString() { return "Person{" + "firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + '}'; } public static class PersonBuilder { private String firstName; private String lastName; PersonBuilder() { } public PersonBuilder firstName(String firstName) { this.firstName = firstName; return this; } public PersonBuilder lastName(String lastName) { this.lastName = lastName; return this; } public Person build() { return new Person(firstName, lastName); } public String toString() { return "Person.PersonBuilder(firstName=" + this.firstName + ", lastName=" + this.lastName + ")"; } } }
Весь код занимает ~80 строк, хотя у нас всего два поля и шаблонный код для них. К счастью, есть библиотека Lombok, которая позволяет решить проблему.
Lombok предлагает декларативный подход к удалению boilerplate на основе аннотаций:
package ru.otus; import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.ToString; @Getter @ToString @EqualsAndHashCode @RequiredArgsConstructor @Builder public class Person { private final String firstName; private final String lastName; }
Аннотации даже не нуждаются в пояснении. И так понятно, какой код каждая аннотация генерирует на этапе компиляции. Думаете, 5 аннотаций вместо 80 строк кода, — это всё?
Нет, мы можем заменить и эти аннотации одной —
package ru.otus; import lombok.Builder; import lombok.Data; @Data @Builder public class Person { private final String firstName; private final String lastName; }
Lombok предоставляет ещё много других полезных возможностей. Но подробнее об этом лучше посмотреть на официальном сайте.
Есть вопрос? Напишите в комментариях!