1
resposta

Erro ao utilizar o OptionalDouble

Por alguma razão o código: this.avaliacao = OptionalDouble.of(Double.valueOf(dadosSerie.avaliacao())).orElse(0);

Dava o seguinte erro:

java.lang.NullPointerException: Cannot invoke "String.trim()" because "in" is null at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838) ~[na:na] at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110) ~[na:na] at java.base/java.lang.Double.parseDouble(Double.java:735) ~[na:na] at java.base/java.lang.Double.valueOf(Double.java:698) ~[na:na] at br.com.tiagosouzagarcia.screenmatch.model.Serie.(Serie.java:20) ~[classes/:na] at br.com.tiagosouzagarcia.screenmatch.principal.Principal.lambda$listarSeriesBuscadas$0(Principal.java:87) ~[classes/:na] ...

Porém ao trocar para this.avaliacao = OptionalDouble.of(Double.parseDouble(dados.avaliacao())).orElse(0.0) funcionou.

Qual poderia ser a razão disso?

1 resposta

Olá Tiago! Tudo bem?

A diferença entre Double.valueOf(dadosSerie.avaliacao()) e Double.parseDouble(dados.avaliacao()) pode parecer sutil, mas pode ter um impacto significativo dependendo do contexto dos dados que você está processando.

O erro java.lang.NullPointerException: Cannot invoke "String.trim()" because "in" is null sugere que dadosSerie.avaliacao() está retornando null em algum momento. Quando você usa Double.valueOf, ele internamente chama Double.parseDouble, que por sua vez tenta chamar String.trim() no valor passado. Se esse valor for null, você obterá um NullPointerException.

Aqui está um exemplo prático para ilustrar a diferença:

String avaliacao = null;

// Isso lançará NullPointerException
Double valor = Double.valueOf(avaliacao);

// Isso lançará NumberFormatException
Double valor = Double.parseDouble(avaliacao);

No seu caso, ao usar Double.parseDouble(dadosSerie.avaliacao()), você está lidando diretamente com a exceção NumberFormatException se o valor for null ou não for um número válido. Isso pode ser mais fácil de gerenciar dependendo do seu fluxo de código.

Para evitar o NullPointerException, você pode verificar se dadosSerie.avaliacao() é null antes de tentar convertê-lo. Aqui está um exemplo de como você pode fazer isso:

String avaliacaoStr = dadosSerie.avaliacao();
double avaliacao = (avaliacaoStr != null) ? Double.parseDouble(avaliacaoStr) : 0.0;
this.avaliacao = OptionalDouble.of(avaliacao).orElse(0.0);

Dessa forma, você garante que Double.parseDouble só seja chamado se dadosSerie.avaliacao() não for null.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.