Saltar al contenido

¿Cuál es la diferencia entre Objects.requireNonNullElse() y Optional.ofNullable().orElse()?

Nuestro team de trabajo ha estado mucho tiempo buscando soluciones a tu duda, te regalamos la soluciones y nuestro objetivo es resultarte de mucha ayuda.

Solución:

Hay una pequeña diferencia en su comportamiento. Objects.requireNonNullElse() requiere que uno de los parámetros no seanullde lo contrario, un NullPointerException es aventado.

String foo = null, bar = null;
Optional.ofNullable(foo).orElse(bar); //returns a null value
Objects.requireNonNullElse(foo, bar); //throws a NullPointerException

La diferencia conceptual entre elegir uno u otro es como se explica en su documentación. Se basa en el enfoque de un consumidor de API para elegir cuál de ellos se supone que debe utilizar de manera efectiva.

Optional es un objeto contenedor que puede contener o no un objeto nonull valor.

Una variable cuyo tipo es Optional nunca debe ser en sí mismo null; siempre debe apuntar a un Optional instancia.

Esta es una clase basada en valores; el uso de operaciones sensibles a la identidad (incluida la igualdad de referencia (==), el código hash de identidad o la sincronización) en instancias de Opcional puede tener resultados impredecibles y debe evitarse.

  • ofNullable

    devuelve un Optional con un valor presente si el valor especificado no esnullde lo contrario un vacío Optional

  • orElse

    devuelve el valor si está presente de lo contrario, devuelve otro.

De ahí el siguiente comportamiento:

String foo = null;
=> Optional.ofNullable(foo).orElse("nonNull")
=> Optional.ofNullable(null).orElse("nonNull")
=> Optional.empty().orElse("nonNull")
=> return otherwise "nonNull"

igual que atraviesa

String foo = null, bar = null;
=> Optional.ofNullable(foo).orElse(bar);
=> Optional.ofNullable(null).orElse(bar);
=> Optional.empty().orElse(bar)
=> return otherwise 'bar'
=> returns null

Objectses una clase compuesta por static métodos de utilidad para operar en objetos, o verificar ciertas condiciones antes de una operación.

Estas utilidades incluyen null-seguro o null-métodos tolerantes para calcular el código hash de un objeto, devolviendo un string para un objeto, comparando dos objetos y comprobando si los índices o los valores de subrango están fuera de los límites.

  • requireNonNullElse

    devuelve el primer argumento si es no-null y de otra manera el segundo argumento si es no-null

De ahí la diferencia de comportamiento:

String foo = null;
=> Objects.requireNonNullElse(foo, "nonNull")
=> Objects.requireNonNullElse(null, "nonNull");

que además evalúa internamente si requireNonNull("nonNull", "defaultObj") y luego

=> returns "nonNull" since its a non-null value

ahora que atraviesa

String foo = null, bar = null;
=> Objects.requireNonNullElse(foo, bar);
=> Objects.requireNonNullElse(null, bar);

Comprueba internamente si requireNonNull(bar, "defaultObj") que entonces

=> throws a NullPointerException

Como también está documentado

throws NullPointerException – si ambos obj son nully defaultObj es null

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *