Objects.isNull vs. Optional.ofNullable [Duplikat]

Oct 21 2020

Ich habe diesen Code in einem Test verwendet

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

und wenn ich diesen Code durch ersetze

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

Ich habe diesen Assertionsfehler in meinen Tests:

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

Antworten

2 ernest_k Oct 21 2020 at 17:12

Optional.ofNullable(String.valueOf(o))wird nicht leer sein, wenn o == null, da String.valueOf(null)der String zurückgegeben wird "null".

Die korrekte Verwendung von optional gibt es:

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

Wobei ofNullable(null)ein Leerzeichen optional wird, wodurch orElse(null)es schließlich aufgerufen wird.

1 ShekharKhairnar Oct 21 2020 at 17:11

String.valueOf () gibt anStirng () eines Objekts zurück, wenn es nicht null ist, oder gibt "null" zurück

direkt aus der String-Klasse:

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

Das bedeutet, dass Sie in Ihrer Behauptung "null" gleich null testen, was fehlschlägt.