Feature Java: Optional

Por Gaspar Barancelli Junior em 25 de abril de 2024

A classe Optional foi introduzida no Java 8 para auxiliar os desenvolvedores a lidar de forma mais segura com valores que podem ser nulos, ou seja, que não estão presentes. Antes do Java 8, o retorno de null em métodos era comum e podia facilmente levar a erros no código, como o famoso NullPointerException. O Optional foi criado para minimizar esses problemas, oferecendo uma forma alternativa de tratar a ausência de valores sem recorrer ao uso de null.

O que é Optional?

Optional é uma classe contêiner que pode ou não conter um valor não-nulo. Seu principal objetivo é oferecer uma alternativa ao retorno nulo de métodos, que é uma fonte comum de erros, como o infame NullPointerException. Usando Optional, os desenvolvedores podem expressar de forma explícita que uma variável pode estar ausente, melhorando assim a clareza do código e a robustez.

Por que usar Optional?

  • Redução de NullPointerExceptions: Ao invés de retornar null, métodos podem retornar um objeto Optional, forçando os chamadores a tratar a possibilidade de valores ausentes.

  • Código mais expressivo: O uso de Optional torna o código mais legível, indicando claramente as intenções do desenvolvedor em relação a presença ou ausência de dados.

  • Facilita o uso de APIs fluídas: Optional se integra bem com APIs baseadas em streams do Java 8, suportando operações funcionais como map, flatMap, e filter.

Exemplos de Uso de Optional

Exemplo 1: Criando e verificando a presença de valores
Optional<String> optionalNome = Optional.of("Gaspar");
if (optionalNome.isPresent()) {
    System.out.println("Nome: " + optionalNome.get());
} else {
    System.out.println("Nome não disponível.");
}
Exemplo 2: Uso de orElse e orElseGet
String nomeNulo = null;
String nome = Optional.ofNullable(nomeNulo).orElse("Nome padrão");
System.out.println(nome);  // Nome padrão

String outroNome = Optional.ofNullable(nomeNulo).orElseGet(() -> "Nome gerado dinamicamente");
System.out.println(outroNome);  // Nome gerado dinamicamente
Exemplo 3: Combinando Optional com Streams
List<String> nomes = Arrays.asList("Gaspar", null, "Laura", "Cecilia", null, "Murilo");
List<String> nomesFiltrados = nomes.stream()
    .map(Optional::ofNullable)
    .filter(Optional::isPresent)
    .map(Optional::get)
    .toList();

System.out.println(nomesFiltrados);  // [Gaspar, Laura, Cecilia, Murilo]

Conclusão

A classe Optional oferece uma forma segura e clara de lidar com valores que podem não estar presentes em seu código. Seu uso ajuda a prevenir erros comuns e melhora a legibilidade, facilitando a manutenção do software. Embora possa requerer um pouco de adaptação, o Optional é uma adição valiosa para qualquer projeto Java.

// Compartilhe esse Post

💫
🔥 NOVO APP

Domine o Inglês em 30 dias!

Inteligência Artificial + Repetição Espaçada • Método cientificamente comprovado

✅ Grátis para começar 🚀 Resultados rápidos
×