Olá Bom dia, como estão? Entendi que é da dependência Lombok, mas ainda não ficou claro. Pergunta a) o que é @EqualsAndHashCode(of = "id") e qual a sua funcionalidade; Pergunta b) Por que é necessário incluir of = "id" ?
Obrigado
Maurício G
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!
Olá Bom dia, como estão? Entendi que é da dependência Lombok, mas ainda não ficou claro. Pergunta a) o que é @EqualsAndHashCode(of = "id") e qual a sua funcionalidade; Pergunta b) Por que é necessário incluir of = "id" ?
Obrigado
Maurício G
É uma ótima pergunta, e é natural ter essa dúvida, pois o Lombok simplifica muito o código, mas esconde a lógica por trás de suas anotações.
Vamos detalhar as suas perguntas sobre @EqualsAndHashCode(of = "id").
Resposta à Pergunta A: O que é @EqualsAndHashCode(of = "id") e qual a sua funcionalidade?
A anotação @EqualsAndHashCode é uma anotação do Lombok que gera automaticamente os métodos equals() e hashCode() para você.
equals(): Este método é usado para comparar dois objetos e determinar se eles são "iguais". Sem essa anotação, o método equals() padrão do Java apenas verifica se as duas variáveis de referência apontam para o mesmo objeto na memória. Com o @EqualsAndHashCode, você pode comparar se dois objetos têm os mesmos valores em seus atributos.
hashCode(): Este método retorna um código numérico (um hash) para o objeto. Ele é crucial para o bom funcionamento de estruturas de dados baseadas em hash, como HashMap, HashSet e HashTable. Quando você adiciona um objeto a um HashSet, por exemplo, ele usa o hashCode() para determinar onde armazenar o objeto.
A funcionalidade combinada de equals() e hashCode() é garantir que objetos com os mesmos valores em seus atributos sejam tratados como o "mesmo objeto" em coleções.
Resposta à Pergunta B: Por que é necessário incluir of = "id"?
A parte (of = "id") é crucial e tem uma funcionalidade muito importante: ela instrui o Lombok a usar apenas o atributo id para gerar os métodos equals() e hashCode().
Se você não especificar (of = "id"), o Lombok usará todos os atributos da classe para gerar os métodos. Em uma classe como a de um Paciente ou Médico, que pode ter nome, CPF, telefone, etc., isso poderia causar problemas.
Cenário do problema sem (of = "id"):
Imagine que você tem um objeto medico e você o altera. Por exemplo, muda o número de telefone dele.
Com @EqualsAndHashCode(of = "id"): O hashCode() não mudaria, pois o id continua o mesmo.
Sem (of = "id"): O hashCode() seria recalculado com base no novo telefone, e o valor mudaria. Isso pode quebrar coleções como um HashSet, que não conseguiria mais encontrar o objeto medico porque o hash dele mudou.
Ao usar (of = "id"), você garante que a identidade do objeto é determinada exclusivamente pelo seu ID. Isso é uma boa prática para entidades de banco de dados, pois o ID é a única característica que realmente define a unicidade de um registro.
Em resumo, a combinação @EqualsAndHashCode(of = "id") garante que:
Dois objetos serão considerados iguais se e somente se tiverem o mesmo id.
O hashCode() de um objeto permanece constante, mesmo que outros atributos (como nome ou telefone) sejam alterados.