Java es un lenguaje muy popular, pero tiene algunos inconvenientes. Uno de los inconvenientes más populares es que todavía necesitamos escribir los códigos repetitivos como getters, setters y el método toString() en Java, mientras que Kotlin y Scala, que también están basados en JVM, no lo necesitan y, por lo tanto, este es el razón de su creciente popularidad en la comunidad. Aquí es donde Lombok entra en escena y supera este inconveniente de Java.
Proyecto Lombokes una herramienta de biblioteca Java que se utiliza para minimizar/eliminar el código repetitivo y ahorrar el valioso tiempo de los desarrolladores durante el desarrollo con solo usar algunas anotaciones. Además, también aumenta la legibilidad del código fuente y ahorra espacio. Pero podría estar pensando que hoy en día, todos usan IDE que brindan una opción para generar estos códigos repetitivos, entonces, ¿cuál es el uso de Lombok? Cada vez que usamos IDE para generar estos códigos repetitivos, simplemente nos ahorramos escribir todos estos códigos, pero en realidad está presente en nuestro código fuente y aumenta las LOC (líneas de código) y reduce la capacidad de mantenimiento y la legibilidad. Por otro lado, Lombok agrega todos estos códigos repetitivos en el momento de la compilación en el archivo “.class” y no en nuestro código fuente. Comparemos nuestro código fuente con y sin usar Lombok.
1. Sin Lombok: una clase de modelo Java con cuatro campos privados y sus captadores, definidores, constructor sin argumentos, construcción parametrizada y método toString.
Java
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 + "]"; } }
2. Con Lombok: una clase de modelo Java con cuatro campos privados y sus captadores, definidores, constructor sin argumentos, construcción parametrizada y método toString utilizando anotaciones de Lombok.
Java
import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @NoArgsConstructor @AllArgsConstructor @ToString public class Employee { private @Getter @Setter Integer employeeId; private @Getter @Setter String name; private @Getter @Setter String company; private @Getter @Setter String emailId; }
La diferencia es claramente visible en los códigos. El código fuente original contiene alrededor de 60 líneas de código que Lombok ha reducido a alrededor de 20 líneas de código solamente. No solo reduce las líneas de código, sino que también aumenta la legibilidad y la capacidad de mantenimiento del código fuente.
¿Cómo configurar el proyecto Lombok para eclipse?
1. Descarga el archivo jar de Lombok desde este enlace oficial .
2. Haga doble clic en el archivo jar descargado para ejecutarlo. Aparecerá una GUI para especificar el IDE en el que desea conectarlo.
3. Haga clic en especificar una ubicación y seleccione el IDE.
4. Haga clic en instalar para completar la instalación y luego salga del instalador.
5. Para verificar la instalación correcta, vaya al IDE de Eclipse , seleccione ayuda y luego sobre el eclipse. Verá el proyecto Lombok instalado allí.
Anotaciones de Lombok: Lombok proporciona un conjunto de anotaciones para facilitar nuestra vida de codificación. Veamos las pocas anotaciones de Lombok más utilizadas.
1. @Getter y @Setter: estas anotaciones proporcionan los métodos getter y setter para un campo. Estas anotaciones se pueden utilizar tanto a nivel de campo como de clase. La anotación @Getter genera un método getter con tipo de acceso público que simplemente devuelve el campo y con el nombre getName() si el nombre del campo es «Nombre». La anotación @Setter genera un método setter con tipo de acceso público que devuelve void y toma un solo parámetro para asignar el valor al campo. El setter predeterminado tendrá el nombre setName() si el nombre del campo es «Nombre».
Java
import lombok.Getter; import lombok.Setter; public class Employee { private @Getter @Setter Integer employeeId; private @Getter @Setter String name; private @Getter @Setter String company; private @Getter @Setter String emailId; }
2. @NoArgsConstructor: esta anotación se usa para generar un constructor sin argumentos. Tiene un cuerpo vacío y no hace nada. Generalmente se usa en combinación con algún otro constructor parametrizado en uso. Es necesario cuando desea generar un objeto de la clase sin pasar argumentos en el constructor.
Java
import lombok.NoArgsConstructor; @NoArgsConstructor public class Employee { private Integer employeeId; private String name; private String company; private String emailId; }
3. @AllArgsConstructor: esta anotación se usa para generar un constructor parametrizado que acepta un solo parámetro para cada campo y los inicializa usándolo. Se requiere cuando desea generar un objeto de la clase pasando los valores iniciales de los campos en el constructor.
Java
import lombok.AllArgsConstructor; @AllArgsConstructor public class Employee { private Integer employeeId; private String name; private String company; private String emailId; }
4. @ToString: esta anotación se usa para anular el método toString() y generar una implementación predeterminada para él. La implementación predeterminada imprime el nombre de la clase y los campos en orden, separados por comas. También puede omitir algunos campos que no desea imprimir al anotarlos con @ToString.Exclude .
Java
import lombok.ToString; @ToString public class Employee { private Integer employeeId; private String name; private String company; private String emailId; }
5. @EqualsAndHashCode: esta anotación se usa para anular los métodos equals() y hashCode() y proporciona una implementación predeterminada para esto. La implementación predeterminada usa todos los campos no estáticos, y podemos modificarla y excluir algunos campos usando la anotación @EqualsAndHashCode.Exclude .
Java
import lombok.EqualsAndHashCode; @EqualsAndHashCode public class Employee { private Integer employeeId; private String name; private String company; private String emailId; }
6. @Data: esta anotación es una anotación de acceso directo y agrupa las anotaciones @ToString , @Getter , @Setter , @EqualsAndHashCode y @RequiredArgsConstructor en una sola anotación. Esta anotación proporciona todo el código repetitivo que se usa normalmente en las clases modelo de Java como getters para todos los campos, setter para todos los campos no finales, una implementación predeterminada para toString(), equals() y hashCode() usando todos los campos de la clase y un constructor que inicializa todos los campos de la clase.
Java
import lombok.Data; @Data public class Employee { private Integer employeeId; private String name; private String company; private String emailId; }
7. @Builder: esta anotación se puede usar para eliminar el código repetitivo involucrado en la configuración de propiedades para un objeto. Esto es útil para POJO que tienen muchos campos. Con esta anotación, la configuración de propiedades para un objeto se puede hacer en una sola declaración de código, lo que hace es legible y limpio.
Java
import lombok.Builder; @Builder public class Employee { private Integer employeeId; private String name; private String company; private String emailId; }
Ejemplo: uso de @Builder
Java
import java.io.*; class LombokTest { public static void main (String[] args) { Employee employee = Employee.builder().employeeId(21).name("GFG").company("GeeksForGeeks") .emailId("gfg@geeks.com").build(); } }