top of page

Introdução ao Lombok

O projeto Lombok é uma biblioteca Java que permite criar um código Java utilizando anotações que permitem substituir a criação de getters e setters, métodos equals, builders e entre outros. Para os exemplos a seguir, iremos utilizar como build tool o Maven. Maven < dependencies >
< dependency >
< groupId >org.projectlombok</ groupId >
< artifactId >lombok</ artifactId >
< version >1.18.16</ version >
< scope >provided</ scope >
</ dependency >
</ dependencies > Estamos utilizando o escopo do tipo provided que significa que o Lombok será configurado em tempo de compilação. Vamos criar uma classe chamada Customer e nela iremos criar alguns campos, construtores, métodos getters e setters e um builder. Tudo isso de forma manual. E em seguida vamos recriar esta classe utilizando os recurso do Lombok. Classe Customer import java.util.Date;

public class Customer {

private Long id ;
private String firstName ;
private String lastName ;
private Date birthDate ;

public Customer(){
}

public Customer(Long id, String firstName,
String lastName, Date birthDate){
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.birthDate = birthDate;
}

public Long getId() {
return id ;
}

public void setId(Long id) {
this.id = id;
}

public String getFirstName() {
return firstName ;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName ;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public Date getBirthDate() {
return birthDate ;
}

public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
} Entendendo a classe Customer Na classe Customer criamos: 4 campos 2 Construtores, sendo 1 default métodos getters e setters para cada campo Perceba que uma quantidade razoável de código foi criado. Recriando a classe Customer utilizando Lombok import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
import java.util.Date;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Customer {
private Long id ;
private String firstName ;
private String lastName ;
private Date birthDate;
} Agora perceba a diferença entre o primeiro e este último. Muito mais limpo e elegante. Entendendo as anotações utilizadas @AllArgsConstructor Esta anotação permite substituir a criação de um construtor como por exemplo: public Customer(Long id, String firstName,
String lastName, Date birthDate){
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.birthDate = birthDate;
} Assim, caso seja necessário adicionar um novo campo, não é necessário declará-lo no construtor. O Lombok faz este trabalho. @NoArgsConstructor Já está anotação, substitui o construtor default, ou seja, não te obriga a passar campos como parâmetros no construtor ao criar um novo objeto. Por exemplo: public Customer(){} @Data Esta é uma das anotações mais interessantes. Ela permite a não necessidade da criação do métodos getters e setters, como foi criado no primeiro exemplo de código da classe Customer . Criando a classe Customer utilizando Builder de forma tradicional O Builder é um padrão de projeto (padrão de criação) utilizado bastante em código Java para a criação de objetos. No próximo código vamos implementar um builder de forma manual. import java.util.Date;

public class Customer {

private Long id ;
private String firstName ;
private String lastName ;
private Date birthDate ;

private Customer(){}

public static class Builder {

private Long id ;
private String firstName ;
private String lastName ;
private Date birthDate ;

public Builder id(Long id){
this.id = id;
return this ;
}

public Builder firstName(String firstName){
this.firstName = firstName;
return this ;
}

public Builder lastName(String lastName){
this.lastName = lastName;
return this ;
}

public Builder birthDate(Date birthDate){
this.birthDate = birthDate;
return this ;
}

public Customer build(){
Customer customer = new Customer();
customer. id = this.id ;
customer. firstName = this.firstName ;
customer. lastName = this.lastName ;
customer. birthDate = this.birthDate ;
return customer;
}
}

@Override
public String toString() {
return "id = " + this.id +
" FirstName = " + this.firstName +
" LastName = " + this.lastName +
" BirthDate = " + this.birthDate ;
}
} Aplicando o Builder na prática import java.util.Date;

public class Main {

public static void main(String[] args) {
Customer customer = new Customer
.Builder()
.id(1L)
.firstName( "Jones" )
.lastName( "Paul" )
.birthDate( new Date())
.build();

System. out .println(customer);
}
} Resultado id = 1 FirstName = Jones LastName = Paul BirthDate = Sun Dez 28 11:48:55 BRT 2020 Perceba mais uma vez, um código verboso que poderia ser facilmente substituído pelo Lombok. Agora vamos recriar o código acima utilizando o Lombok. Recriando a classe Customer utilizando Builder do Lombok import lombok. Builder ;
import java.util.Date;

@Builder
public class Customer {

private Long id ;
private String firstName ;
private String lastName ;
private Date birthDate ;

@Override
public String toString() {
return "id = " + this.id +
" FirstName = " + this.firstName +
" LastName = " + this.lastName +
" BirthDate = " + this.birthDate ;
}
} Perceba agora a diferença em termos de quantidade de código escrito. Apenas criamos os mesmos campos, reutilizamos o método toString() e adicionamos a anotação @Builder responsável pela criação e substituição de todo aquele código criado anteriormente no primeiro exemplo. Aplicando o Builder utilizando Lombok na prática import java.util.Date;

public class Main {

public static void main(String[] args) {
Customer customer = Customer
. builder ()
.id(1L)
.firstName( "Jones" )
.lastName( "Paul" )
.birthDate( new Date())
.build();
System. out .println(customer);
}
} Perceba que houve uma pequena mudança para executar o código acima. Neste caso não foi preciso criar um objeto utilizando a palavra chave new , apenas invocamos o método builder() e os campos da classe para atribuição. Resultado id = 1 FirstName = Jones LastName = Paul BirthDate = Sun Dez 28 11:48:55 BRT 2020 Prático e útil, certo? É isso, curtiu? Até mais!

Introdução ao Lombok
bottom of page