¿Existe un método estático estándar de Java “tanto nulo como igual”?

2 minutos de lectura

Para ahorrar algo de escritura y aclarar mi código, ¿hay una versión estándar del siguiente método?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}

  • ¿Alguien puede decir dónde es útil tal cosa?

    – anjanb

    8 oct 2008 a las 21:43

  • Simplemente le permite omitir las comprobaciones nulas en su método equals().

    – Michael Myers

    8 de octubre de 2008 a las 21:47

  • Si está implementando una Colección, su método .contains(), cuando se le da “o” necesita probar “si esta colección contiene al menos un elemento e tal que (o==null ? e==null : o.equals(e )).” De manera similar, su método .remove() tiene que eliminar dicho elemento.

    – nueva cuenta

    9 de julio de 2009 a las 6:16

  • Solo mis dos centavos. Yo usaría: public static boolean bothNullOrEqual(Object x, Object y) { return ( x == y || ( x != null && x.equals(y) ) ); } En mi humilde opinión, es más legible para los programadores novatos.

    – m_vitaly

    5 de septiembre de 2010 a las 7:49

  • Otro caso de uso: compare un valor para ver si ha cambiado de su valor anterior durante una verificación sucia.

    – Neromante

    16 de noviembre de 2013 a las 23:48

avatar de usuario
desarrollador

Con Java 7, ahora puede hacer directamente un igual seguro nulo:

Objetos.iguales(x, y)

(La biblioteca de Jakarta Commons ObjectUtils.equals() se ha vuelto obsoleta con Java 7)

  • Este método también se implementa en la biblioteca de inyección de dependencias de Google, Guice.

    – Niels

    11 de junio de 2012 a las 12:30

  • Spring también implementa un método similar: nullSafeEquals en la clase ObjectUtils

    – jpsstavares

    17 de julio de 2012 a las 16:32


  • Google Guava también tiene Objects.equals().

    – Espina

    11 de abril de 2013 a las 18:27

  • Esto solo es nulo seguro con respecto a x. Para y depende de la implementación de los iguales del objeto dado. (la implementación es return (x == y) || (x != null && x.equals(y));)

    – emi-le

    6 de abril de 2018 a las 9:09

avatar de usuario
Mate

si por casualidad tiene acceso a la biblioteca de Jakarta Commons, hay ObjectUtils.equals() y muchas otras funciones útiles.

EDITAR: leyó mal la pregunta inicialmente

Si está usando Objects.equal(x, y)

¿Ha sido útil esta solución?