Esiste un metodo statico Java standard "sia nullo o uguale"?


101

Per salvare un po 'di digitazione e chiarire il mio codice, esiste una versione standard del seguente metodo?

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

Qualcuno può dire dove una cosa del genere è utile?
anjanb

2
Ti permette solo di saltare i controlli nulli nel tuo metodo equals ().
Michael Myers

1
Se stai implementando una Collection, il tuo metodo .contains (), quando viene fornito "o", deve testare "se questa collezione contiene almeno un elemento e tale che (o == null? E == null: o.equals (e )) ". Allo stesso modo, il tuo metodo .remove () deve rimuovere tale elemento.
newacct

6
Solo i miei due centesimi. Io userei: public static boolean bothNullOrEqual (Object x, Object y) {return (x == y || (x! = Null && x.equals (y))); } IMHO, è più leggibile per i programmatori alle prime armi.
m_vitaly

1
Un altro caso d'uso: confrontare un valore per vedere se è cambiato rispetto al valore precedente durante un controllo sporco.
Neromante

Risposte:


193

Con Java 7 ora puoi eseguire direttamente un null safe uguale a:

Objects.equals (x, y)

(La libreria Jakarta Commons ObjectUtils.equals () è diventata obsoleta con Java 7)


Questo metodo è implementato anche in Guice della libreria di iniezione delle dipendenze di Google.
Niels

1
Spring implementa anche un metodo simile: nullSafeEquals sulla classe
ObjectUtils

2
Google Guava ha anche Objects.equals ().
Spina

Questo è solo nullsafe concering x. Per y dipende dall'implementazione di uguali dell'oggetto dato. (l'implementazione è return (x == y) || (x != null && x.equals(y));)
emi-le

23

se per caso hai accesso alla libreria Jakarta Commons c'è ObjectUtils.equals () e molte altre utili funzioni.

EDIT: inizialmente ha letto male la domanda


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.