1
resposta

11 Para saber mais: Generics

"Caso o tipo da variável valor seja diferente do tipo do conteúdo, devolvemos o valor anterior do conteúdo." Não entendi "devolvemos o valor anterior do conteúdo" qual valor anterior do conteúdo?

A Luri diz "Você está certo, minha explicação anterior estava incorreta. Vamos analisar novamente o que acontece nesse caso: ... Então, quando o tipo da variável valor é diferente do tipo do conteúdo da caixa, o método simplesmente retorna null, sem devolver nenhum "valor anterior do conteúdo".

1 resposta

Olá, Moacyr.

Tudo bem?

No método somaConteudoNaCaixa, a ideia é somar o valor passado como parâmetro ao conteúdo atual da caixa, mas isso só é feito se ambos os tipos forem compatíveis (por exemplo, ambos sendo Integer, Double ou String). Caso contrário, o método retorna null.

Vamos analisar o código:

public <T> T somaConteudoNaCaixa(T valor) {
    if (this.conteudo instanceof Integer c && valor instanceof Integer i) {
        Integer resultado = c + i;
        return (T) resultado;
    } else if (this.conteudo instanceof Double c && valor instanceof Double d) {
        Double resultado = c + d;
        return (T) resultado;
    } else if (this.conteudo instanceof String c && valor instanceof String s) {
        String resultado = c + "\n" + s;
        return (T) resultado;
    }

    return null;
}

No trecho acima, se this.conteudo e valor não forem do mesmo tipo, o método retorna null. Isso significa que não há uma "devolução do valor anterior do conteúdo", mas sim um retorno null, indicando que a operação não foi realizada devido à incompatibilidade de tipos.

Vamos ver um exemplo prático para ilustrar:

public static void main(String[] args) {
    Caixa<Double> caixaDeValor = new Caixa<>();
    caixaDeValor.setConteudo(150.50);
    System.out.println(caixaDeValor.somaConteudoNaCaixa(350.50)); // Saída: 501.0
    System.out.println(caixaDeValor.somaConteudoNaCaixa("texto")); // Saída: null
}

No exemplo acima:

  • Quando somamos 150.50 com 350.50, a saída é 501.0 porque ambos são do tipo Double.
  • Quando tentamos somar 150.50 com "texto", a saída é null porque 150.50 é Double e "texto" é String, resultando em tipos incompatíveis.

Portanto, a frase "devolvemos o valor anterior do conteúdo" pode ser confusa. O correto é entender que, se os tipos não forem compatíveis, o método retorna null, sem realizar nenhuma operação.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.