Objects.isNull vs Optional.ofNullable [dupliquer]

Oct 21 2020

J'ai ce morceau de code utilisé dans un test

if (Objects.isNull(o)) {
            return null;
        }
        return String.valueOf(o);   

et quand je remplace ce morceau de code par

Optional.ofNullable(String.valueOf(o)).orElse(null);

J'ai cette erreur d'assertion dans mes tests:

Expecting: <"null">
to be equal to: <null>
but was not.

Réponses

2 ernest_k Oct 21 2020 at 17:12

Optional.ofNullable(String.valueOf(o))ne sera pas une option vide quand o == null, car String.valueOf(null)renvoie la chaîne "null".

L'utilisation correcte de l'option il y a:

Optional.ofNullable(o).map(String::valueOf).orElse(null);

ofNullable(null)rendra un vide facultatif, provoquant orElse(null)son appel.

1 ShekharKhairnar Oct 21 2020 at 17:11

String.valueOf () renvoie toStirng () d'un objet s'il n'est pas nul ou renvoie une chaîne "null"

directement de la classe String:

public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

cela signifie que dans votre assertion, vous testez "null" égal à null qui échoue.