Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida no Ex. 16 da Aula 5 - Collections framework

Olá, Com o código :


    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + numero;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this== obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Conta other = (Conta) obj;
        if (numero != other.numero)
            return false;
        return true;
    }

Estou em dúvida, não consegui identificar os métodos utilizados, quais sao realmente as comparações. Se são feitas pelo objeto por completo ou se consigo fazer a comparação somente pelo "numero" da conta.

O "Conta other = (Conta) obj", está realizando qual procedimento?.

Obrigado.

1 resposta
solução!

Olá Vanessa! O código que realiza a comparação é o método equals() Ou seja, este seguinte trecho de seu código:

@Override
    public boolean equals(Object obj) {
        if (this== obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Conta other = (Conta) obj;
        if (numero != other.numero)
            return false;
        return true;
    }

Veja bem, a linha Conta other = (Conta) obj não é uma comparação.

Nessa linha é feito um Casting, pois perceba que o método equals() recebe como parâmetro um Object. Porém, um Object não possui o atributo número. Mas veja que toda Classe em java herda de Object então por isso é possível utilizar a variável Object. Mas para fazermos a comparação entre os números é necessário utilizar uma variável do tipo Conta. Então é feito o casting e convertido o Object em Conta. No entanto, devo ressaltar que isso so será possível se realmente o objeto for uma Conta.

Então é feito a conversão e depois é comparado os números das contas:

        Conta other = (Conta) obj;
        if (numero != other.numero)
            return false;
        return true;

Espero ter ajudado! Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software