Remplacement de contrôle null avec java 8 en option

springenthusiast:

Je suis en train de remplacer ci-dessous bloc de code avec option, voulez simplement vérifier qu'il y aura de mauvaises conséquences de le faire comme la performance ou quoi que ce soit en tant que tel?

Code existant:

UserObj userObj=new UserObj();
Object result = fetchDetails();
if (null != result) {
    userObj.setResult(result.toString());
}

Avec Java 8 Optional:

UserObj userObj=new UserObj();
Optional.ofNullable(fetchDetails()).ifPresent(var -> userObj.setResult(var.toString()));

Faire ce changement juste pour faire concise look de code comme il y a beaucoup de blocs de contrôle null dans mon code.

ETO:

Tout ce que je pense d' abord vous malentendu dans le but de Optional. Il est non seulement pour remplacer

if(obj != null){ ... }

Le point principal de Optionalest de fournir un moyen pour une fonction renvoyant une valeur indiquant l'absence d'une valeur de retour. S'il vous plaît lire cet article pour plus de détails.

L'utilisation correcte de Optionalvotre cas serait de retour en option ResultObjde la fetchDetailsméthode:

Optional<ResultObj> fetchDetails() {
   ...
}

Ensuite , vous enchaînez simplement les méthodes sur les cheveux Optionalque vous avez fait avant.

Mise à jour

Si vous ne pouvez pas modifier fetchDetailsil y a encore une option d'envelopper dans votre propre méthode comme suit:

Optional<ResultObj> fetchOptionalDetails() {
    return Optional.ofNullable(fetchDefails());
}

Création d'une nouvelle méthode ajoutera une surcharge minuscule, mais le code sera beaucoup plus facile à lire:

fetchOptionalDetails().ifPresent(details -> /* do something */);

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=173049&siteId=1
conseillé
Classement