O Tipo Optional
Optional<T> representa um valor que pode ou não estar presente, como uma alternativa explícita a retornar null e esperar que quem chama lembre de verificar. Optional.of(value) envolve um valor presente, Optional.empty() representa um ausente, e orElse(fallback) o desembrulha com segurança, fornecendo um padrão quando não há nada.
import java.util.Optional;
public class Main {
static Optional<String> findUser(int id) {
if (id == 1) {
return Optional.of("Alice");
}
return Optional.empty();
}
public static void main(String[] args) {
Optional<String> user = findUser(1);
System.out.println(user.orElse("Unknown"));
Optional<String> missing = findUser(2);
System.out.println(missing.orElse("Unknown"));
}
}Alice Unknown
Essa é a base do Java: classes e interfaces para estruturar código, inheritance e polymorphism para compartilhar comportamento, generics e o Collections Framework para estruturas de dados reutilizáveis e type-safe, e lambdas e streams para o estilo mais moderno e funcional do Java. A partir daqui, o melhor próximo passo é praticar — escolha um programa pequeno e o construa, contando com a verificação estática de tipos do compilador para detectar erros ao longo do caminho.
Practice exercise
Escreva um method findUser(int id) que retorne um Optional<String>: "Alice" se id for 1, caso contrário empty. Chame-o com 2 e imprima o resultado com orElse("Unknown").