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.