1
resposta

OptionalDouble sem try/catch não previne erros de parse

Não sei se entendi errado, mas no curso é sugerida a utilização do OptionalDouble como alternativa ao try/catch para realizar o parse da avaliação das séries. Entretanto, se houver erro no parse, a exceção sobe de dentro do OptionalDouble.of:

    public static void main(String[] args) {
        OptionalDouble.of(Double.valueOf("Valor inválido")).orElse(0);
    }

Exception in thread "main" java.lang.NumberFormatException: For input string: "Valor inválido" at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054) at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.base/java.lang.Double.parseDouble(Double.java:792) at java.base/java.lang.Double.valueOf(Double.java:755)

parece que o try/catch não pode ser retirado.

1 resposta

Olá Fabio. Tudo bem?

O OptionalDouble é uma ferramenta útil para lidar com valores que podem ou não estar presentes, mas ele não substitui o tratamento de exceções que podem ocorrer durante a conversão de strings para números. No seu exemplo, a tentativa de converter "Valor inválido" para um Double resulta em uma NumberFormatException antes mesmo de o OptionalDouble entrar em cena.

O OptionalDouble é mais eficaz quando você já tem um valor numérico e quer lidar com a possibilidade de ele não estar presente. No caso de conversão de strings para números, você ainda precisa lidar com possíveis exceções usando try/catch.

Aqui está um exemplo de como você pode combinar ambos:

public static void main(String[] args) {
    String valor = "Valor inválido";
    try {
        double numero = Double.valueOf(valor);
        OptionalDouble optional = OptionalDouble.of(numero);
        System.out.println(optional.orElse(0));
    } catch (NumberFormatException e) {
        System.out.println("Erro ao converter o valor: " + e.getMessage());
    }
}

Neste exemplo, o try/catch é usado para capturar a exceção durante a conversão, e o OptionalDouble pode ser usado posteriormente para lidar com a presença ou ausência do valor numérico de forma mais elegante.

Espero ter ajudado.

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