Boa noite Professor
Você poderia por favor em um exemplo prático, me explicar a funcionalidade dessa anotação?
Obrigado
Att. Marcos Vizine
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Boa noite Professor
Você poderia por favor em um exemplo prático, me explicar a funcionalidade dessa anotação?
Obrigado
Att. Marcos Vizine
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!!