Java 8 a introduit Optional
API pour désigner des valeurs qui pourraient être null
à l' exécution. Dans les cas suivants est - il préférable de jeter une exception vérifiée ou retourner un Optional
type de retour pour représenter le cas de bord?
Cas 1: Type de retour Optional
private Optional<Item> getItem(String itemName)
{
for (Item item : items)
{
if (item.getName().equals(itemName))
return Optional.of(item);
}
return Optional.empty();
}
Cas n ° 2: Lancer exception vérifiée
private Item getItem(String itemName) throws ItemNotFound
{
for (Item item : items)
{
if (item.getName().equals(itemName))
return item;
}
throw new ItemNotFound();
}
En tant que défenseurs Martin Fowler, Optional
/ motif spécial de cas est une meilleure pratique mais dans ce scénario simple de lancer une exception contrôlée fait aussi le travail.
Lequel dois-je suivrai?
Cela se résume essentiellement à: Est-il judicieux pour ce cas d'utilisation pour l'élément à manquer?
Disons dire une application a des utilisateurs. L'utilisateur peut ajouter un numéro de téléphone à son infocomptes. Comme son numéro tendance ne doit pas être là, vous pouvez utiliser en option. numéro de téléphone est peut-être là, mais peut-être manquant. Le code client doit gérer en option / valeur nullable.
D'autre part, si je veux regarder son e-mail, ce qui est obligatoire lors de l'inscription. Ensuite, l'exception est le chemin à parcourir. Email doit être là, mais non. Ici code client fait face à l'état application non valide / utilisateur endommagé.