Para que serve a interface Optional e quando devo usá-la?

Gostaria de saber como e para que usar a Interface Optional

https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html

Optional não é uma interface, é uma classe.

Em java, o uso de optional é basicamente pra evitar NullPointerException.

A recomendação é usar como tipo de retorno em métodos que poderiam retornar null.

Por exemplo, imagem uma classe com os seguintes métodos:

  List<Person> searchByName(String name);
  Person findById(int personId);

No método searchByName geralmente se não encontrar ninguém, você retorna uma lista vazia. Para quem chama esse método é muito fácil lidar com o resultado. Se tiver um for iterando na lista, simplesmente não faz nada, tudo funciona normal.

No método findById, se não encontrar a pessoa com aquele id, o que retorna? Você pode lançar uma exception, o que não é sempre ideal. Em muitos casos é retornado null. Daí é muito fácil alguém que chama esse método não conferir se o resultado é um objeto Person ou é null. O optional resolve isso. O método ficaria assim:

  Optional<Person> findById(int personId);

Agora todo mundo chamando esse método sabe que o método pode retornar uma pessoa ou pode retornar vazio. Meio que incentiva a pessoa a tratar de alguma forma.

Em outras linguagens o uso de Optional/Maybe/Option é mais amplo, mas no java o caso de uso recomendado é basicamente esse.

1 curtida