Objects.isNull frente a Optional.ofNullable [duplicado]

Oct 21 2020

Tengo este fragmento de código utilizado en una prueba

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

y cuando reemplace este código con

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

Tengo este error de afirmación en mis pruebas:

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

Respuestas

2 ernest_k Oct 21 2020 at 17:12

Optional.ofNullable(String.valueOf(o))no será un opcional vacío cuando o == null, porque String.valueOf(null)devuelve el String "null".

El uso correcto de opcional existe:

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

Donde ofNullable(null)hará que un vacío sea opcional, lo orElse(null)que provocará que finalmente se invoque.

1 ShekharKhairnar Oct 21 2020 at 17:11

String.valueOf () devuelve aStirng () de un objeto si no es nulo o devuelve una cadena "nula"

directamente de la clase String:

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

eso significa que en su afirmación está probando "nulo" es igual a nulo, lo cual falla.