Optional a été conçu comme un type de retour pour les méthodes qui peuvent légitimement n'avoir aucun résultat, afin que l'appelant ne puisse pas ignorer l'absence. Il convient mal aux champs, aux paramètres de constructeur et aux arguments de méthode, et il ne doit pas envelopper une collection, puisqu'une liste vide dit déjà qu'il n'y a rien. Appeler get sans vérifier annule tout l'intérêt ; utilisez map, filter, orElseGet ou orElseThrow avec une exception qui a du sens.
Pourquoi les recruteurs posent cette question
C'est une petite question de conception d'API qui révèle comment vous pensez la nullité et la lisibilité. Le recruteur veut voir que vous savez pourquoi il existe, qu'il n'est pas sérialisable et n'a donc pas sa place dans les entités ni dans les champs de DTO, et que c'est le chaînage qui le rend utile. Les réponses qui le traitent comme un emballage de test de null s'accompagnent en général de code plus dur à lire que le null d'origine.
Comment structurer votre réponse
- Énoncez l'usage prévu : un type de retour qui exprime une absence possible.
- Listez les endroits où il n'a pas sa place et pourquoi.
- Montrez le style chaîné plutôt que isPresent et get.
- Mentionnez la règle de la collection vide.
Exemple de réponse
Il existe pour qu'une signature de méthode puisse dire ceci peut ne rien renvoyer, ce qu'un type de retour nullable n'a jamais communiqué. Donc les recherches de type repository renvoient un Optional et l'appelant est obligé de s'en occuper. Ça dérape quand les gens en mettent partout. En champ, il ajoute un objet par instance et n'est pas sérialisable, ce qui cause de vrais problèmes dans les entités et les payloads. En paramètre, il donne juste aux appelants trois états à considérer au lieu de deux, donc j'utilise plutôt une surcharge. Et une méthode qui renvoie une collection renvoie une collection vide, jamais un Optional de liste, parce que vide signifie déjà la même chose. Côté style, si j'écris isPresent suivi de get, je viens d'écrire un test de null avec du cérémonial en plus, donc je chaîne à la place : map vers ce que je veux, filter, puis orElseThrow avec une exception métier qui dit quel id est introuvable. La seule chose que je ne ferais pas, c'est l'utiliser comme remplacement générique de null sur une base de code existante, puisque le style mixte est pire que l'une ou l'autre convention seule.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Quelle est la différence entre orElse et orElseGet ?
- Comment géreriez-vous un champ nullable qui vient d'une API externe ?
- Comment Optional interagit-il avec les streams ?
Autres questions pour Développeur Java
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions