Библиотека Lombok для Java | OTUS

Библиотека Lombok для Java

Java_Deep_3.6_ышеу-5020-507339.png

Рассмотрим полезную библиотеку Lombok. Давайте представим, что у нас есть самый обычный класс на Java: — два поля; — конструктор; — геттеры и сеттеры; — переопределены методы equals и hashCode; — toString для отладки; — и мы решили реализовать паттерн builder.

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 строк кода, — это всё?

Нет, мы можем заменить и эти аннотации одной — @Data.

package ru.otus;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class Person {

   private final String firstName;
   private final String lastName;

}

Lombok предоставляет ещё много других полезных возможностей. Но подробнее об этом лучше посмотреть на официальном сайте.

Есть вопрос? Напишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто