Só agora que na nova versão do NetBeans 6.0 é que é possível na IDE criar os métodos equals() e hashCode(Object), o que na verdade é uma mão na roda para muitos desenvolvedores, encontrei alguns desenvolvedores como Vinicius Senger da Globalcode e Jefferson Prestes do time de tradução que me disserem que abriam o eclipse apenas para utilizar o recurso de criação destes métodos....
Pensando nisso, como fazia um tempo que não mexia na plataforma netBeans, decidi criar um plugin para a comunidade e de quebra relembrar as APIs da plataforma.
E o plugin faz justamente isto, gera os métodos equals e hashCode baseados nos campos da classe que esta em foco no editor, o método criar os métodos respeitando o contrato de implementação.
Onde o contrato nos diz que para implementar uma relação equivalente em referencias de objetos não nulo o método:
- É reflexivo: para qualquer valor de referencia not null para
x
,x.equals(x)
deve retornartrue
. - É simétrico: para qualquer valor de referencia not null para
x
ey
,x.equals(y)
deve retornartrue
se e somente sey.equals(x)
retornartrue
. - É transitivo: para qualquer valor de referencia not null para
x
,y
, ez
, sex.equals(y)
retornartrue
ey.equals(z)
retornartrue
, entãox.equals(z)
deve retornartrue
. - É consistente: para qualquer valor de referencia not null para
x e
y
, multiplas invocações de x.equals(y) consistentemente retornarãotrue
ou consistentemente retornarãofalse
. - Para qualquer valor de referencia not null para
x
,x.equals(null)
deve retonarfalse
.
Como não poderia deixar de ser, temos que seguir um contrato para seguir
hashCode
que é: - Sempre que for invocado no mesmo objeto mais de uma vez durante a execução de uma aplicação Java, o método hashCode deve sempre retornar o mesmo integer.
- Se dois objetos são iguais de acordo com a execução do método equals(Object), então chamar o método
hashCode
em cada um dos dois objetos deve produzir o mesmo resultado inteiro. - Não é obrigado que se dois objetos são diferentes de acordo com a execução do método equals(Object) que chamando o método hashCode em cada um dos dois objetos deve produzir resultados inteiros distintos. Entretanto, o programador deve ter cautela, pois produzir resultados inteiros distintos para objetos diferentes podeve causar problemas de performance ao utilizar hashtables.
Segue abaixo alguns screenshots do plugin. O plugin esta internacionalizado, disponivel para inglês e português.
Para instalar o plugin efetue o download do arquivo nbm no portal de plugin do netbeans clicando aqui.
Após instalar o nbm espere enquanto o netBeans faz um "hot deploy", após a instalação, para utilizar o plugin, no editor de um arquivo java basta acessar o menu Refatorar > Implementar hashCode() e equals(Object) ou clicando com o botão direito do mouse e acessando o menu pop up Refatorar > Implementar hashCode() e equals(Object).


Após pressionar ok, pronto o código esta pronto =) ,, fácil não.. Eclipse para que ? hehe
E ele até que é esperto, se você tentar criar os métodos em uma classe que já possui os métodos, o plugin dá mensagem.


Se sua classe tiver só a classe equals e quiser só o hashCode por exemplo, ele é bem compreensivo..

Bom é isso, esse é um plugin bem simples, mas que ajuda muito no dia a dia.. peço aos meus queridos amigos que baixem este plugin e testem, se tiver dúvidas ou sugestões, é só avisar.