Daniel Reis:
Amigo, infelizmente o termo não é exagerado, n é um erro de programação, mas um erro de implementação… pq os dois métodos estão
retornando true… seria o mesmo, ou pior do q n sobrescreve-los…
Dois métodos retornando true, onde? No código do c0m4nch3 só o método equals retorna true.
Amigo, o método hashCode está implementado de forma a retornar sempre o mesmo valor, ou seja, todos os objetos Prova serão encontrados em um mesmo “depósito”, o que torna o processo de localização ineficiente mas não errado. Veja esse trecho retirado do livro da Kathy: “É perfeitamente válido ter um método de código de hashing absolutamente ineficiente em sua classe, contanto que ele não viole o contrato especificado na documentação da classe Object”.
Concordo que as consequências dessa implementação são desastrosas, principalmente com relação ao método equals mas ainda assim ela é válida. Da maneira como foi colocada a sua resposta no primeiro post ficou parecendo que vc não conhecia essa diferença sutil entre os termos apropriado com válido ou eficiente.
Cuidado ao fazer afirmações do tipo “…o correto seria:” quando se trata de assuntos onde um termo ou a interpretação dele faz diferença. Além do mais em um outro sentido fica parecendo que só existe essa solução. Na explicação do thingol existem outras soluções, por exemplo além da apresentada eu poderia implementar utilizando um outro número primo nos cálculos do código que não o 37 e/ou o operador XOR e ainda assim poderia estar correta e eficiente. Como vc mesmo viu na explicação dele a implementação de equals que eu apresentei que por sinal foi a mesma que vc apresentou não é “correta”, no meu caso eu apenas apresentei uma maneira sem especificar se era correta, eficiente ou seja lá o que for, apenas para o c0m4nch3 sanar as suas dúvidas.
Só pra reforçar onde foquei meus comentários. No dia-a-dia com certeza eu buscaria por eficiência nas minhas implementações.
No livro da Kathy pág. 302 seção Observações para o exame e nos parágrafos subsequentes entre outras coisas fala exatamente sobre o fato de hashCode retornar sempre o mesmo valor ser válido e até mesmo apropriado. E que correto não significa necessariamente bom! Quem possuir o livro e tiver dificuldades no assunto recomendo a leitura dessa parte.