Je communique avec une API et j'ai utilisé l'utilisation de la classe code> en option code>. Mais je me sens comme si le traitement des erreurs pourrait être plus élégant, de sorte que toutes les suggestions sur la manière d'améliorer cela seront bien reçues. Je manque également une manipulation d'exception dans les appels d'API réels?
3 Réponses :
Vous pouvez utiliser une vérification à l'aide de ou p>
Utiliser lire JDK8 DOC sur la facultative ici A > p>
En outre, vous voudrez peut-être couper vos paramètres d'entrée avant de rechercher des chaînes vides p> en option.ispresent () code> p>
en option.orelSethrow (fournisseur étend x> exceptionsUpplier) code> p>
Le problème principal avec votre code: vous jetez beaucoup de résultats très différents em> dans le même "godet". p>
Comme dit, ce sont des problèmes Ainsi: envisagez de ne pas réduire les différents résultats dans une option vide. Considérez plutôt de lancer (différent?) Exceptions. Vous utilisez facultatif lorsque "Aucun résultat" est un résultat em> valide em> de l'opération. Mais "Aucun résultat, parce que le mauvais nom d'utilisateur" ne se sent pas comme un résultat valide. p> getMarketPlacecustomerIDBYUSName () code> par exemple renvoie un vide optionnel lorsque: p>
"" code> signifie vide, mais
"" code> n'est pas vide ?!) Li>
AWSMARKETPLACITER CODE> L'instance peut être trouvée pour l'utilisateur donné LI>
ul>
Si vous rencontrez des cas d'angle de manipulation, vous pouvez améliorer la lisibilité du code avec eux comme dans la première méthode utilisant FindFirst code> telle que:
public Optional<String> getMarketplaceCustomerIdByUsername(String username) {
return Optional.ofNullable(username) // if username is null empty
.filter(name -> !name.isEmpty()) // empty string returns filtered out
.map(name -> apiClient.getMarketplaceData(getKeys(name))) // handles 'null' calue returned
.map(marketplaceData -> marketplaceData.getObjects().get(0).getCustomerId()); // here as well
}
Comme votre approche, spécialement pour cette dernière fonction, ne pensez pas que le premier ajoute des performances ou de la lisibilité.
@Jonb Le premier est une version simplifiée de l'itération utilisant le API Java-Stream API. C'est une question d'opinion, pour moi, il se lit mieux. (Trouvez le premier compte de ce type ou d'autre retour d'absence)