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/