¿Existe un método estático estándar de Java "igual o nulo"?


101

Para ahorrar algo de escritura y aclarar mi código, ¿existe 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

2
Simplemente le permite omitir comprobaciones nulas en su método equals ().
Michael Myers

1
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 )). " Del mismo modo, su método .remove () tiene que eliminar dicho elemento.
newacct

6
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 programadores novatos.
m_vitaly

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

Respuestas:


193

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

Objects.equals (x, y)

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


Este método también se implementa en Google Dependency injection-libray Guice.
Niels

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

2
Google Guava también tiene Objects.equals ().
Spina

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

23

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


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.