Tome los dos ejemplos de código:
if(optional.isPresent()) {
//do your thing
}
if(variable != null) {
//do your thing
}
Por lo que puedo decir, la diferencia más obvia es que el Opcional requiere la creación de un objeto adicional.
Sin embargo, muchas personas han comenzado a adoptar rápidamente los opcionales. ¿Cuál es la ventaja de usar opcionales versus un cheque nulo?
if
declaraciones son taaaaaai en la última década, y todos están usando abstracciones de mónada y lambdas ahora.
if(x.isPresent) fails_on_null(x.get)
salir del sistema de tipos y mantener la garantía de que el código no se romperá "en su cabeza" sobre la distancia (ciertamente corta) entre la condición y la llamada a la función. En optional.ifPresent(fails_on_null)
el sistema de tipos le garantizamos esto, y no tiene que preocuparse.
Optional.ifPresent
(y varias otras construcciones de Java) es que solo puede modificar efectivamente las variables finales y no puede lanzar excepciones comprobadas. Esa es una razón suficiente para evitar a menudo ifPresent
, desafortunadamente.