Veja os dois exemplos de código:
if(optional.isPresent()) {
//do your thing
}
if(variable != null) {
//do your thing
}
Tanto quanto posso dizer, a diferença mais óbvia é que o Opcional requer a criação de um objeto adicional.
No entanto, muitas pessoas começaram a adotar rapidamente os opcionais. Qual é a vantagem de usar opcionais versus uma verificação nula?
if
declarações são muuuuito última década, e todo mundo está usando abstrações de mônada e lambdas agora.
if(x.isPresent) fails_on_null(x.get)
sair do sistema de tipos, é necessário manter a garantia de que o código não irá "entrar na sua cabeça" pela distância (reconhecidamente curta) entre a condição e a chamada de função. No optional.ifPresent(fails_on_null)
sistema de tipos faz essa garantia para você, e você não precisa se preocupar.
Optional.ifPresent
(e várias outras construções Java) é que você só pode modificar efetivamente variáveis finais e não pode lançar exceções verificadas. Essa é a razão suficiente para evitar frequentementeifPresent
, infelizmente.