An Interest In:
Web News this Week
- March 21, 2024
- March 20, 2024
- March 19, 2024
- March 18, 2024
- March 17, 2024
- March 16, 2024
- March 15, 2024
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
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To