Pregunta de entrevista para Desarrollador Java

¿Dónde debería usarse Optional, y dónde es un error?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Optional se diseñó como tipo de retorno para métodos que pueden legítimamente no tener resultado, para que quien llama no pueda ignorar la ausencia. Encaja mal en campos, parámetros de constructor y argumentos de método, y no debería envolver una colección, ya que una lista vacía ya dice que aquí no hay nada. Llamar a get sin comprobar echa por tierra el propósito; usa map, filter, orElseGet u orElseThrow con una excepción con significado.

Por qué lo preguntan los entrevistadores

Es una pequeña pregunta de diseño de API que revela cómo piensas sobre la nulabilidad y la legibilidad. El entrevistador quiere ver que sabes por qué existe, que no es serializable y por tanto no pinta nada en entidades ni en campos de DTO, y que el encadenamiento es lo que lo hace valioso. Las respuestas que lo tratan como un envoltorio de comprobación de nulos suelen venir con código más difícil de leer que el nulo original.

Cómo estructurar tu respuesta

  • Enuncia el uso previsto: un tipo de retorno que expresa posible ausencia.
  • Enumera los sitios donde no pinta nada y por qué.
  • Muestra el estilo encadenado en lugar de isPresent y get.
  • Menciona la regla de la colección vacía.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Existe para que la firma de un método pueda decir esto quizá no devuelva nada, algo que un tipo de retorno nulable nunca comunicó. Así que las búsquedas de estilo repositorio devuelven un Optional y quien llama está obligado a tratarlo. Donde se tuerce es cuando la gente lo pone en todas partes. Como campo añade un objeto por instancia y no es serializable, lo que causa problemas reales en entidades y payloads. Como parámetro solo le da a quien llama tres estados que pensar en vez de dos, así que uso una sobrecarga. Y un método que devuelve una colección devuelve una colección vacía, nunca un Optional de una lista, porque vacía ya significa lo mismo. En cuanto al estilo, si escribo isPresent seguido de get he escrito una comprobación de nulos con ceremonia extra, así que encadeno: map a lo que quiero, filter, y luego orElseThrow con una excepción de dominio que diga qué id no se encontró. Lo único que no haría es usarlo como sustituto general del nulo en una base de código existente, porque el estilo mezclado es peor que cualquiera de las dos convenciones por separado.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Cuál es la diferencia entre orElse y orElseGet?
  • ¿Cómo manejarías un campo nulable que viene de una API externa?
  • ¿Cómo interactúa Optional con los streams?

Más preguntas para Desarrollador Java

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot