Objects.isNull vs. Optional.ofNullable [duplicato]

Oct 21 2020

Ho questo pezzo di codice utilizzato in un test

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

e quando sostituisco questo pezzo di codice con

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

Ho questo errore di asserzione nei miei test:

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

Risposte

2 ernest_k Oct 21 2020 at 17:12

Optional.ofNullable(String.valueOf(o))non sarà un optional vuoto quando o == null, perché String.valueOf(null)restituisce la stringa "null".

Il corretto utilizzo degli optional è:

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

Where ofNullable(null)creerà un facoltativo vuoto, che orElse(null)alla fine verrà invocato.

1 ShekharKhairnar Oct 21 2020 at 17:11

String.valueOf () ritorna aStirng () di un oggetto se non è nullo o restituisce una stringa "nulla"

direttamente dalla classe String:

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

ciò significa che nella tua asserzione stai testando "null" è uguale a null che fallisce.