java - baeldung - ¿Por qué usar Opcional.of sobre Opcional.ofNullable?
optional java ejemplo (4)
Además, si sabe que su código no debería funcionar si el objeto es nulo, puede lanzar una excepción utilizando
Optional.orElseThrow
String nullName = null;
String name = Optional.ofNullable(nullName).orElseThrow(NullPointerException::new);
@ , corrígelo si me equivoco.
Cuando se usa la clase Java 8
Optional
, hay dos formas en que un valor se puede ajustar en un opcional.
String foobar = <value or null>;
Optional.of(foobar); // May throw NullPointerException
Optional.ofNullable(foobar); // Safe from NullPointerException
Entiendo que
Optional.ofNullable
es la única forma segura de usar
Optional
, pero ¿por qué existe
Optional.of
?
¿Por qué no solo usar
Optional.ofNullable
y estar seguro en todo momento?
Esto depende de los escenarios.
Digamos que tiene alguna funcionalidad comercial y necesita procesar algo con ese valor aún más, pero tener un valor
null
en el momento del procesamiento lo afectaría.
Luego, en ese caso, puede usar
Optional<?>
.
String nullName = null;
String name = Optional.ofNullable(nullName)
.map(<doSomething>)
.orElse("Default value in case of null");
Opcional debería usarse principalmente para resultados de Servicios de todos modos. En el servicio, sabe lo que tiene a mano y devuelve Opcional.of (someValue) si tiene un resultado y devuelve Opcional.empty () si no lo tiene. En este caso, algún valor nunca debe ser nulo y aún así, devuelve un Opcional.
Su pregunta se basa en la suposición de que el código que puede arrojar
NullPointerException
es peor que el código que no puede.
Esta suposición está mal.
Si espera que su
foobar
nunca sea nulo debido a la lógica del programa, es mucho mejor usar
Optional.of(foobar)
ya que verá una
NullPointerException
que indicará que su programa tiene un error.
Si usa
Optional.ofNullable(foobar)
y el
foobar
es
null
debido al error, entonces su programa continuará funcionando incorrectamente en silencio, lo que puede ser un desastre mayor.
De esta manera, un error puede ocurrir mucho más tarde y sería mucho más difícil de entender en qué momento salió mal.