Библиотека Lombok для Java | OTUS
🚀 OTUS Fest 2021
Бесплатная образовательная онлайн-конференция для IT-специалистов.
Подробнее

Курсы

Программирование
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Разработчик IoT
-13%
C# Developer. Professional
-9%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Java Developer. Basic C++ Developer. Professional Web-разработчик на Python MS SQL Server Developer Android Developer. Basic Разработчик программных роботов (RPA) на базе UiPath и PIX Microservice Architecture Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов React.js Developer Node.js Developer Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes JavaScript Developer. Basic Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Экспресс-курс «IaC Ansible»
-10%
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Дизайн сетей ЦОД
-13%
NoSQL Основы Windows Server MS SQL Server Developer Инфраструктурная платформа на основе Kubernetes Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Библиотека 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 комментариев
Для комментирования необходимо авторизоваться