`Optional`: para que serve e como NÃO usar
Pergunta
Qual o propósito de `Optional<T>` em Java e quais são os usos errados comuns?
Resposta esperada
`Optional<T>` sinaliza no TIPO DE RETORNO de um método que a ausência de valor é um resultado esperado e normal (`findById` que pode não achar), forçando quem chama a lidar com o vazio (`orElse`, `orElseThrow`, `map`, `ifPresent`) em vez de receber `null` e esquecer de checar. Usos errados: (1) como campo de classe ou parâmetro de método — não é serializável de forma limpa, infla o objeto, e pra parâmetro basta uma sobrecarga ou `@Nullable`; (2) `Optional` de coleção — retorne uma lista vazia, não `Optional<List>`; (3) `opt.get()` sem checar `isPresent()` — recria o NPE (é o `!!` do Java); (4) `if (opt.isPresent()) { opt.get() ... }` — verboso, prefira `map`/`ifPresent`/`orElse`. Regra: `Optional` como valor de retorno pra 'pode não existir', nunca como campo, parâmetro ou wrapper de coleção.
Por que perguntam isso
Pergunta pleno de Java. Sinal de domínio: 'só como retorno', e `.get()` sem checar como o NPE de volta. Conecta com `!!` do Kotlin.