Optional foi desenhado como tipo de retorno para métodos que legitimamente podem não ter resultado, para que quem chama não consiga ignorar a ausência. Ele é um encaixe ruim para campos, parâmetros de construtor e argumentos de método, e não deve embrulhar uma coleção, já que uma lista vazia já diz que não tem nada aqui. Chamar get sem checar derruba o propósito; use map, filter, orElseGet ou orElseThrow com uma exceção significativa.
Por que os entrevistadores perguntam isso
É uma pequena pergunta de design de API que revela como você pensa sobre nulabilidade e legibilidade. O entrevistador quer ver que você sabe por que ele existe, que ele não é serializável e por isso não pertence a entidades nem a campos de DTO, e que o encadeamento é o que o torna valioso. Respostas que o tratam como um embrulho de checagem de nulo normalmente vêm com código mais difícil de ler do que o nulo era.
Como estruturar sua resposta
- Enuncie o uso pretendido: um tipo de retorno que expressa ausência possível.
- Liste os lugares onde ele não pertence e por quê.
- Mostre o estilo encadeado em vez de isPresent e get.
- Cite a regra da coleção vazia.
Exemplo de resposta
Ele existe para que a assinatura de um método consiga dizer que isso pode não retornar nada, coisa que um retorno nulável nunca comunicou. Então buscas em estilo de repositório retornam um Optional e quem chama é obrigado a lidar com isso. Onde dá errado é quando as pessoas colocam ele em todo lugar. Como campo ele adiciona um objeto por instância e não é serializável, o que causa problemas reais em entidades e payloads. Como parâmetro ele só dá a quem chama três estados para pensar em vez de dois, então eu uso uma sobrecarga no lugar. E um método que retorna uma coleção retorna uma coleção vazia, nunca um Optional de lista, porque vazia já significa a mesma coisa. Em termos de estilo, se eu escrevo isPresent seguido de get eu acabei de escrever uma checagem de nulo com cerimônia extra, então eu encadeio: map para a coisa que eu quero, filter, depois orElseThrow com uma exceção de domínio que diz qual id não foi encontrado. A única coisa que eu não faria é usar ele como substituto genérico de nulo por uma base de código existente, já que o estilo misturado é pior do que qualquer uma das convenções sozinha.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Qual é a diferença entre orElse e orElseGet?
- Como você trataria um campo nulável que vem de uma API externa?
- Como o Optional interage com streams?
Mais perguntas para Desenvolvedor Java
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas