Muitas vezes queremos comparar objetos em java mas não usando somente 1 atributo, como nome, cpf, placa … queremos que dois objetos sejam considerados iguais somente se ambos possuírem dois atributos semelhantes (nome e cpf, Placa e Renavam). Ou então, o caso da busca poder ser por vários tipos de parâmetros, buscar pelo nome ou pela idade. Em uma aplicação, é fundamental que o usuário possa escolher o parâmetro que deseja realizar a busca.
Com isso, para exemplificar melhor o problema proposto, seguiremos o mesmo exemplo do 1° artigo esclarecendo a sobrescrita do equals, o cadastro de pessoas com nome e cpf. Sendo assim, vamos direto ao assunto.
1° caso – Sobrescrevendo o equals para comparar objetos através de dois atributos – && (usando o e)
public class Pessoa { ... public boolean equals(Object obj) { if (obj instanceof Pessoa) { Pessoa qualquer = (Pessoa) obj; return this.cpf.equals(qualquer.getCpf()) && this.nome.equals(qualquer.getNome()); }else { return false; } } }
Nesse primeiro caso, o equals retorna true caso os dois atributos nome e cpf sejam iguais. Se o nome for igual mas o cpf não for, retorna false (vice e versa).
2° caso – Sobrescrevendo o equals para comparar objetos através de dois atributos – || (usando o ou)
public class Pessoa { ... public boolean equals(Object obj) { if (obj instanceof Pessoa) { Pessoa qualquer = (Pessoa) obj; return this.cpf.equals(qualquer.getCpf()) || this.nome.equals(qualquer.getNome()); }else { return false; } } }
Esse segundo caso se encaixa muito bem quando você quer dar ao usuário a opção de buscar um objeto por diferentes tipos de parâmetros, seja nome, seja cpf. Só basta que um dos atributos passados seja igual ao atributo de um objeto que o equals irá considerar e retornar true.
0 comentário