Objects.isNull a Optional.ofNullable [duplikat]

Oct 21 2020

Mam ten fragment kodu użyty w teście

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

a kiedy zamieniam ten fragment kodu na

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

Mam ten błąd asercji w moich testach:

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

Odpowiedzi

2 ernest_k Oct 21 2020 at 17:12

Optional.ofNullable(String.valueOf(o))nie będzie pustym opcjonalnym atrybutem when o == null, ponieważ String.valueOf(null)zwraca ciąg "null".

Prawidłowe użycie opcji jest:

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

Where ofNullable(null)sprawi, że puste będzie opcjonalne, powodując, że orElse(null)zostanie ostatecznie wywołane.

1 ShekharKhairnar Oct 21 2020 at 17:11

String.valueOf () zwraca toStirng () obiektu, jeśli nie ma wartości null lub zwraca ciąg znaków „null”

prosto z klasy String:

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

oznacza to, że w swoim twierdzeniu testujesz „null” równa się null, co kończy się niepowodzeniem.