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

[Dúvida] O que faz o valueOf()?

Olá! Não entendi porque a instrutora adicionou o método valueOf() nessa linha e nem o que ele faz. Poderiam me ajudar, por favor?

@Override
    public int compareTo(Compra outraCompra) {
        return Double.valueOf(this.valor).compareTo(Double.valueOf(outraCompra.valor));
    }
1 resposta
solução!

Olá,

Em resumo:

O método compareTo() é para comparação entre valores. Neste caso, será comparado os valores this.valor e outraCompra.valor. E depois, será retornado (return) um valor inteiro (int) dependendo de qual for o resultado dessa comparação (Double.valueOf(this.valor).compareTo(Double.valueOf(outraCompra.valor))).

De forma um pouco mais detalhada:

A sua classe Compra está implementando Comparable<Compra> e por via de regra, será exigido que o método compareTo() seja implementada. E essa implementação de comparação fica a seu critério, e na aula o critério diz:

return Double.valueOf(this.valor).compareTo(Double.valueOf(outraCompra.valor));

O método compareTo() faz uma comparação entre objetos, porém a sua variável valor é do tipo primitivo, e não um objeto o que impede de usar o método diretamente da seguinte forma: this.valor.compareTo(); // Não pode!. Então, para resolver esse problema, usamos classes Wrapper que são classes especiais que possuem métodos capazes de fazer conversões em variáveis primitivas para serem trabalhados como objetos¹.

Links úteis / referência: ¹ http://www.linhadecodigo.com.br/artigo/3667/classes-wrappers-em-java.aspx