Pergunta de entrevista para Desenvolvedor Java

Onde Optional deve ser usado, e onde ele é um erro?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

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

Exemplo falado, em primeira pessoa

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 funciona

Perguntas 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

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot