Obedeça corretamente o contrato do equal
Substituir o método equal da classe Object incorretamente ocasiona consequências drásticas. A forma mais indicada para evitar essa situação perigosa é não substituir o método. Considere a não substituição uma prática para os seguintes casos:
- Quando cada objeto da classe for inerentemente único. Típico caso da classe Thread que representa uma “entidade ativa” e não “entidade de valores”.
- Quando cada objeto da classe não possuir sentido de igualdade e assim não necessitar usar tal lógica durante a solução. Típico caso da classe Random.
- Quando a classe pai de uma classe já fizer a substituição, sendo suficiente para a lógica de igualdade da classe filha.
- Quando cada objeto da classe possuir restrição de visibilidade exclusiva privada dentro de um pacote e o desenvolvedor tiver certeza que a lógica do equal não será utilizada nesse escopo. Para garantir, substitua o equal da classe lançando uma runtime exception de “não permitido”.
A implementação do equal da Object é suficiente para todos os casos acima, no qual compara a referência do objeto, sendo o necessário para estes. O método equal deve ser substituído somente em casos no qual os objetos de uma classe possuir identificação individualizada, necessitando de lógica de igualdade normalmente comum em classes que representam “entidades de valores”. Para estes casos, siga corretamente o contrato da especificação Object.
Para todas as informações, veja o post inicial.
“Mas se esperamos o que ainda não vemos, aguardamo-lo pacientemente.” Romanos 8:25

