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

E se eu quisesse utilizar mais critérios no equals?

Esse é o código da aula:

@Override
public boolean equals(Object obj) {
    Aluno outroAluno = (Aluno) obj;
    return this.nome.equals(outroAluno.nome);
}

Mas e se ao invés disso eu quisesse usar não apenas o nome do aluno, mas o nome do aluno junto com o numero de matricula? Como ficaria o equals e o hashcode?

Por exemplo, no equals eu queria algo como:

@Override
     public boolean equals(Object obj) {
        Aluno outro = (Aluno) obj;
        if(this.nome.equals(outro.nome) && Integer.valueOf(this.numeroMatricula).equals(outro.numeroMatricula)) {
            return true;
        }
        return false;
     }

Já no hashCode, eu queria algo assim:

public int hashCode() {
         return Objects.hash(this.nome, this.numeroMatricula);
    }

Qual seria o melhor jeito de fazer um equals quando estivermos falando de vários critérios para estabelecer uma igualdade (nome, numero de matricula e outros objetos de diferentes tipos, por exemplo)?

3 respostas

Exemplo usando nome, numeroMatricula e telefone:

    public boolean equals(Object object) {
        if (this == object) return true;
        if (object == null || getClass() != object.getClass()) return false;
        if (!super.equals(object)) return false;
        Aluno aluno = (Aluno) object;
        return numeroMatricula == aluno.numeroMatricula &&
                java.util.Objects.equals(nome, aluno.nome) &&
                java.util.Objects.equals(telefone, aluno.telefone);
    }

    public int hashCode() {
        return Objects.hash(super.hashCode(), nome, numeroMatricula, telefone);
    }

Otávio, tudo bom?

Obrigado pela resposta!

Teria como explicar o passo a passo? Algumas decisões não ficaram claras pra mim

solução!
    public boolean equals(Object object) {
        if (this == object) return true; // se a referência em memória dos dois objetos é a mesma, então eles são o mesmo objeto = return true
        if (object == null || getClass() != object.getClass()) return false; // se passou null ou se os tipos são diferentes, não são iguais = return false
        if (!super.equals(object)) return false; // se a classe pai não é a mesma = return false
        Aluno aluno = (Aluno) object; // converte para Aluno
        return numeroMatricula == aluno.numeroMatricula && // compara matricula
                java.util.Objects.equals(nome, aluno.nome) && // compara nome
                java.util.Objects.equals(telefone, aluno.telefone); // compara telefone
    }