Omitindo os Getters e Setters com Lombok
Recentemente conheci o projeto Lombok. Este projeto tem como objetivo facilitar a implementação de classes Java, de forma que você fica desobrigado a criar os métodos get/set, toString, equals e hashcode. Para isso, o Lombok fornece algumas anotações que devem ser adicionadas nas classes e a partir destas anotações, os métodos já citados serão automaticamente criados nos arquivos compilados. Neste tutorial será demonstrado como utilizar o Lombok.
1. Vincular ao IDE
Para utilizar o Lombok, é necessário vincular o projeto Lombok a IDE que você está utilizando. Isto é necessário porque durante o desenvolvimento, como as classes não contém os métodos setters, getters, toString, e outros, as classes externas devem ter acesso a estes métodos, assim, essa vinculação se faz necessária. Ou seja, se você tem a classe User
com o atributo id
, como teria acesso ao getId()
se ele não está implementado na classe? Bem, é isso que essa vinculação faz, ela diz a IDE que tal método existe, sem mesmo ele estar presente em sua classe.
Para vincular o Lombok a IDE, você deve fazer o download do arquivo lombok.jar – http://projectlombok.org/download.html. Este arquivo é também uma biblioteca que deve ser adicionada na pasta lib de seu projeto para que a aplicação tenha acesso as anotações que serão adicionadas as classes. Para realizar esta vinculação, basta executar o arquivo lombok.jar e uma janela será aberta. Nesta janela você deve selecionar o diretório que contém o executável de sua IDE. Na figura a seguir, um exemplo desta vinculação com a IDE Eclipse e exibido:
2. Criando a classe User
Vamos agora trabalhar com o Lombok. Não esqueça de adicioar o lombok.jar a pasta lib de seu projeto. Veja na Listagem 1 a classe User
implementada sem o uso do Lombok.
Listagem 1. Classe User, sem o lombok.
package com.mballem.lombok;
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
Agora que você conhece a classe User
, veja como ela ficaria ao utilizarmos os recursos do Lombok via anotações, conforme Listagem 2.
Listagem 2. Classe User, com Lombok.
package com.mballem.lombok;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@ToString
@EqualsAndHashCode
public class User {
@Getter @Setter
private Integer id;
@Getter @Setter
private String name;
}
Analisando a Listagem 2 você pode notar que foram adicionadas 4 anotações, duas delas na assinatura da classe e duas em cada atributo de User
. A anotação @ToString
vai gerar o método toString()
na compilação da classe User
, assim como, as outras anotações vão gerar os métodos correspondentes a elas. Desta forma, você não precisa adicionar os métodos que foram implementados na Listagem 1, o Lombok é quem vai fazer isso.
E com a vinculação do Lombok a IDE, você terá normalmente o acesso ao métodos não implementados, conforme mostra a Listagem 3.
Listagem 3. Método main().
package com.mballem.lombok;
public class Test {
public static void main(String[] args) {
UserLombok user = new UserLombok();
user.setId(100);
user.setName("Joey Ramone");
System.out.println(user.toString());
System.out.println("User:" + user.getName());
}
}
Para mais informações sobre o Lombok acesse o site oficial e leia a documentação disponível. Existem algumas outras anotações que podem ser utilizadas e algumas anotações aceitam propriedades para certas configurações, como exemplo, o método set()
pode ser gerado como protected
ao invés de public
da seguinte forma: @Setter(AccessLevel.PROTECTED)
.
Saiba mais em:
· Project Lombok – http://projectlombok.org/