Categorías
Desarrollo

Limpia tu código repetitivo de Java con Lombok

Lombok es una librería Java que nos permite reemplazar el código repetitivo al que nos obliga Java mediante simples anotaciones.

¿Qué es Lombok?

Lombok es una biblioteca de Java que se utiliza para simplificar el código Java mediante la adición de anotaciones a las clases. Estas anotaciones se procesan en tiempo de compilación y generan código adicional que se incluye en la clase compilada.

¿Para qué se usa Lombok?

Lombok se utiliza comúnmente para generar código de «boilerplate», es decir, código que se escribe con frecuencia y que es necesario para hacer que una clase funcione correctamente, pero que no aporta lógica específica al programa. Algunos ejemplos de código de boilerplate que Lombok puede generar son:

  • Constructores
  • Métodos «get» y «set» para acceder a los campos de una clase.
  • Métodos «equals» y «hashCode» para comparar objetos.
  • Métodos «toString» para representar un objeto como una cadena de texto.

Al utilizar Lombok, se puede escribir menos código y se puede hacer que el código sea más legible y mantenible. Por ejemplo, en lugar de escribir una clase con muchos métodos «get» y «set» para cada campo, se puede utilizar una anotación de Lombok para generar automáticamente esos métodos.

Requisitos para utilizar Lombok

Para utilizar Lombok en un proyecto de Java, es necesario instalar la biblioteca y configurar el compilador de Java para que procese las anotaciones de Lombok durante la compilación. También es necesario utilizar una herramienta de análisis de código compatible con Lombok, como IntelliJ IDEA o Eclipse, para poder ver el código generado por Lombok en el editor de código.

Anotaciones más comunes

Lombok proporciona un conjunto de anotaciones que se pueden utilizar para generar código de boilerplate en clases de Java. Algunas de las anotaciones más comunes son:

  • @Getter y @Setter: generan métodos «get» y «set» para acceder a los campos de una clase.
  • @ToString: genera un método «toString» que representa un objeto como una cadena de texto.
  • @EqualsAndHashCode: genera métodos «equals» y «hashCode» para comparar objetos.
  • @NoArgsConstructor, @RequiredArgsConstructor y @AllArgsConstructor: generan constructores sin argumentos, con argumentos obligatorios y con todos los argumentos, respectivamente.
  • @Data: combina varias de las anteriores anotaciones en una sola, generando métodos «get», «set», «equals», «hashCode» y «toString» para una clase.

Estas son solo algunas de las anotaciones disponibles en Lombok. Hay muchas otras anotaciones que se pueden utilizar para generar código de boilerplate, como anotaciones para crear métodos de acceso a campos volátiles, anotaciones para crear builders y anotaciones para crear clases de inmutable.

Ejemplos de uso

A continuación, se presentan algunos ejemplos de cómo se pueden utilizar las anotaciones de Lombok para generar código de boilerplate en una clase de Java:

  1. @Getter y @Setter:
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Persona {

   private String nombre;
   private int edad;

}

Al compilar esta clase, Lombok generará los métodos «getNombre» y «setNombre» para acceder al campo «nombre», y los métodos «getEdad» y «setEdad» para acceder al campo «edad».

  1. @ToString:
import lombok.ToString;

@ToString
public class Persona {

   private String nombre;
   private int edad;

}

Al compilar esta clase, Lombok generará un método «toString» que devuelve una cadena de texto que representa el objeto. La cadena de texto incluirá los valores de los campos «nombre» y «edad».

  1. @EqualsAndHashCode:
import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Persona {
   
   private String nombre;
   private int edad;

}

Al compilar esta clase, Lombok generará métodos «equals» y «hashCode» que permiten comparar objetos de la clase «Persona» entre sí.

  1. @NoArgsConstructor, @RequiredArgsConstructor y @AllArgsConstructor:
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Required ArgsConstructor;

@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
public class Persona {

   private final String nombre = "";
   private int edad;

}

Al compilar esta clase, Lombok generará tres constructores: uno sin argumentos, uno con el argumento «nombre» (obligatorio) y uno con todos los argumentos.

  1. @Data:
import lombok.Data;

@Data
public class Persona {

   private String nombre;
   private int edad;

}

Al compilar esta clase, Lombok generará métodos «get» y «set» para acceder a los campos «nombre» y «edad», un método «toString» que representa el objeto como una cadena de texto, y métodos «equals» y «hashCode» para comparar objetos.

  1. @Builder

La anotación @Builder  de Lombok se utiliza para generar una clase «builder» que se puede utilizar para construir objetos de manera fluida. Una clase builder se utiliza a menudo cuando una clase tiene muchos argumentos en su constructor o métodos setter y se quiere crear un objeto de manera más legible y concisa.

Por ejemplo, considere la siguiente clase «Persona» con un constructor que toma varios argumentos:

public class Persona {

   private String nombre;
   private String apellidos;
   private int edad;
   private String direccion;


   public Persona(String nombre, String apellidos, int edad, String direccion) {
      this.nombre = nombre;
      this.apellidos = apellidos;
      this.edad = edad;
      this.direccion = direccion;
   }

}

Para crear una instancia de la clase «Persona» con todos sus argumentos, se puede utilizar el siguiente código:

Persona persona = new Persona("Juan", "Gomez", 45, "Reyes Huertas");

Este código puede ser difícil de leer y mantener si se tienen que proporcionar muchos argumentos. En lugar de utilizar el constructor, se puede utilizar la anotación @Builder de Lombok para generar una clase builder que se puede utilizar para crear objetos de manera más legible y concisa:

import lombok.Builder;

@Builder
public class Persona {

   private String nombre;
   private String apellidos;
   private int edad;
   private String direccion;

}

Con la anotación @Builder, se puede utilizar el siguiente código para crear una instancia de la clase «Persona»:

Persona persona = Persona.builder()
        .nombre("Juan")
        .apellidos("Gomez")
        .edad(45)
        .direccion("Reyes Huertas")
        .build();

Este código es más legible y conciso que el código anterior que utiliza el constructor. Además, al utilizar la clase builder, se pueden proporcionar los argumentos en cualquier orden y se pueden dejar algunos argumentos vacíos si se desea.

Ventajas de utilizar Lombok

Las ventajas de utilizar Lombok en un proyecto de Java son:

  • Reduce la cantidad de código que se debe escribir: Lombok puede generar código de boilerplate de manera automática, lo que significa que no es necesario escribir todos esos métodos y constructores manualmente. Esto puede hacer que el código sea más legible y fácil de mantener.
  • Hace que el código sea más consistente: Al utilizar Lombok para generar código de boilerplate, todos los métodos y constructores generados tendrán el mismo estilo y formato. Esto puede hacer que el código sea más consistente y fácil de leer.
  • Mejora la productividad: Al no tener que escribir todo ese código de boilerplate manualmente, se puede ahorrar tiempo y esfuerzo durante el desarrollo.
  • Algunos de los inconvenientes de utilizar Lombok son:
  • Requiere un proceso de configuración: Para utilizar Lombok, es necesario instalar la biblioteca y configurar el compilador de Java para que procese las anotaciones de Lombok durante la compilación.
  • No es compatible con todas las herramientas de desarrollo: Algunas herramientas de desarrollo, como algunos editores de código y depuradores, no son compatibles con Lombok y pueden presentar problemas al trabajar con código que utiliza anotaciones de Lombok.
  • Puede ser difícil entender el código generado: Aunque Lombok hace que el código sea más legible al eliminar el código de boilerplate, el código generado por Lombok puede ser difícil de entender para algunos desarrolladores que no estén familiarizados con la biblioteca.

En general, Lombok es una herramienta útil para simplificar el código Java y mejorar la productividad, pero es importante tener en cuenta sus posibles inconvenientes y elegir si es adecuado para un proyecto en particular.