Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não entendi a anotação @EqualsAndHashCode(of = "id")

Boa noite Professor

Você poderia por favor em um exemplo prático, me explicar a funcionalidade dessa anotação?

Obrigado

Att. Marcos Vizine

2 respostas
solução!

Olá, Marcos! Como vai?

Entendo que a anotação @EqualsAndHashCode(of = "id") pode parecer um pouco confusa à primeira vista, mas ela é muito útil e eu estou aqui para te ajudar a entender.

Essa anotação é parte da biblioteca Lombok, que é utilizada para reduzir a verbosidade do código em Java, gerando automaticamente métodos que são comumente necessários nas classes, como os métodos equals() e hashCode().

No caso da anotação @EqualsAndHashCode(of = "id"), ela está indicando que os métodos equals() e hashCode() devem ser gerados automaticamente pelo Lombok e que eles devem considerar apenas o atributo "id" da classe para realizar as comparações e cálculos.

Isso é útil, por exemplo, quando temos duas instâncias diferentes da classe Medico, mas que representam o mesmo médico (ou seja, têm o mesmo id). Nesse caso, queremos que elas sejam consideradas iguais. Sem essa anotação, o Java consideraria essas duas instâncias como objetos diferentes, pois por padrão o método equals() compara se as duas referências apontam para o mesmo objeto na memória, e o método hashCode() retorna códigos diferentes para instâncias diferentes.

Vamos a um exemplo prático:

Medico medico1 = new Medico(1L, "Dr. House", "house@email.com", "12345", Especialidade.CARDIOLOGIA, new Endereco(...));
Medico medico2 = new Medico(1L, "Dr. House", "house@email.com", "12345", Especialidade.CARDIOLOGIA, new Endereco(...));

System.out.println(medico1.equals(medico2)); // Com a anotação @EqualsAndHashCode(of = "id"), isso imprimirá "true"

No exemplo acima, mesmo que medico1 e medico2 sejam instâncias diferentes (ou seja, ocupem espaços diferentes na memória), eles são considerados iguais, pois representam o mesmo médico (têm o mesmo id).

Espero ter ajudado e bons estudos!

Entendido. Muito obrigado Professor!!