Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
August 15, 2022 11:46 pm GMT

Java Efetivo - Equals

Obedea ao contrato geral ao sobrescrever o equals

Esta uma srie baseada no entendimento de tpicos relacionados ao livro com foco no resumo.

O que ?

Todas as classes do Java herdam os mtodos da classe Object. Dentre esses mtodos o mtodo equals, utilizado para comparar objetos.
Por padro essa implementao utiliza a identificao da instncia para comparar .
O livro deixa claro que existem inmeros problemas que podem ocorrer ao sobrescrever esse mtodo ento, enfatiza em que situaes voc deveria evitar de realizar essa ao.

Quando no sobrescrever

  • Quando sua classe for uma entidade ativa ao invs de valores, exemplo Classe ativa seria a classe thread ou um controller, j a classe de valor seria a que voc modela a entidade do banco de dados como a classe Cliente.
  • Classes que no sero utilizadas para igualdade lgica como helpers, mappers, converters, ou classes semelhantes com esse propsito.
  • Quando a super classe j sobrescreveu o equals e este comportamento j atende as classes filhas, no livro citado como exemplo o caso das classes de Collections, por exemplo as implementaes de List que vm da AbstractList.
  • Quando a classe privada ou esta em pacote privado e voc tem certeza de que o mtodo equals nunca ser invocado.

E quando pode?

Faz sentido sobrescrever quando uma classe ter sentido de igualdade lgica atravs dos seus atributos, diferente de simplesmente usar o identificador da instncia.
Exemplo: Voc tem uma classe cliente, se tivermos duas instncias do mesmo cliente e compararmos sem sobrescrever o equals ele ir entender que no so iguais pois so instncias diferentes, mas os objetos tem os dados do mesmo cliente e deveriam ser considerados iguais.

Impactos

Precisamos ter em mente que o Java utiliza o mtodo equals para comparar objetos em diversas apis da linguagem, como por exemplo na api de Colletions e Map, sobrescrever o equals far com que o comportamento nessas estruturas seja impactado e importante entender para saber se vale a pena sobrescrever o mtodo equals.
O livro cita a importncia de seguirmos algumas regras na hora de sobrescrever esse mtodo para evitarmos problemas maiores, vamos entender melhor sobre elas.

Preste ateno

Reflexiva: Garantir que o objeto ser igual a ele mesmo quando comparado pelo equals, ex x.equals(x) deve retornar true;

Simtrica: dois objetos quaisquer devem chegar em um acordo sobre sua igualdade, nesse ponto precisamos garantir que estamos pensando em todos os cenrios;

Transitiva: Se o objeto de comparao igual a um segundo objeto, e o segundo objeto igual a um terceiro objeto, logo se compararmos o primeiro e o terceiro objeto o mtodo equals deve informar que eles so iguais;

Consistente: Uma vez que o equals identifica que dois objetos so iguais, ele deve sempre retornar que so iguais a menos que um dos objetos seja modificado aps isso.

E por fim a no nulidade , todo objeto comparado com null deve retornar false.

Como?

O livro traz dicas de como criar um mtodo equals com alta qualidade.
1 - Use o operador == com prsito de verificar se o argumento uma referncia ao objeto;
2 - Use o operador instanceod para verificar se o argumento apresenta o tipo correto;
3 - Faa o cast do argumento para o tipo correto;
4 - Para cada campo significativo na classe, verifique se o campo do argumento coincide com o correspondente do objeto;

Calma que tem mais...

Talvez a galera mais experiente desde o comeo esta pensando, e o hashCode? Pois bem, alm de sobrescrever o equals, sempre tenha em mente que ao sobrescrever o equals voc dever sobrescrever o mtodo hashCode.
E no substitua Object por outro tipo na assinatura do equals.
Essa ao to comum na vida dos desenvolvedores Java que algumas IDEs como Intellij j tem a opo de sobrescrever os dois e mostra de maneira fcil quais campos voc deseja comparar e quais campos so obrigatrios na comparao e montam o mtodo de maneira bem simples para o desenvolvedor.


Original Link: https://dev.to/psanrosa13/java-efetivo-equals-2jh9

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To