Tengo un error de compilación

Compilation failure
[ERROR]  unreported exception java.lang.Throwable; must be caught or declared to be thrown

¿Por qué este código no se compila?

Collections.singletonList(Arrays.asList("a", "b", "c")
    .stream()
    .findAny()
    .orElseThrow(() -> {
        String msg = "Failed";
        throw new IllegalArgumentException(msg);
    }));

Mientras esto parece estar bien

Collections.singletonList(Arrays.asList("a", "b", "c")
    .stream()
    .findAny()
    .orElseThrow(() -> new IllegalArgumentException("Failed")));

¿Está relacionado con https://bugs.openjdk.java.net/browse/JDK- 8056983 o el primer bloque de código es incorrecto?

En VS Code y en Eclipse no obtengo un error de sintaxis del IDE.

2
cuh 10 oct. 2019 a las 15:56

1 respuesta

La mejor respuesta

Los dos fragmentos de código son diferentes. En el primero, lanza una excepción en el lambda. En el segundo, devuelve una excepción del lambda.

Para que los dos fragmentos sean coherentes, cambie el primero por

Collections.singletonList(Arrays.asList("a", "b", "c")
    .stream()
    .findAny()
    .orElseThrow(() -> {
        String msg = "Failed";
        return new IllegalArgumentException(msg);
    }));
2
Dónal 10 oct. 2019 a las 13:00