Czy istnieje metoda statyczna zgodna ze standardem Java „zarówno zerowa, jak i równa”?

101

Aby zaoszczędzić trochę pisania i wyjaśnić mój kod, czy istnieje standardowa wersja poniższej metody?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}
Chris Conway
źródło
Czy ktoś może powiedzieć, gdzie taka rzecz jest przydatna?
anjanb
2
Pozwala po prostu pominąć sprawdzanie wartości null w metodzie equals ().
Michael Myers
1
Jeśli implementujesz Collection, twoja metoda .contains (), gdy otrzyma "o", musi przetestować "czy ta kolekcja zawiera przynajmniej jeden element e taki, że (o == null? E == null: o.equals (e )). ” Podobnie Twoja metoda .remove () musi usunąć taki element.
newacct
6
Tylko moje dwa centy. Użyłbym: public static boolean bothNullOrEqual (Object x, Object y) {return (x == y || (x! = Null && x.equals (y))); } IMHO, jest bardziej czytelny dla początkujących programistów.
m_vitaly,
1
Inny przypadek użycia: porównaj wartość, aby zobaczyć, czy zmieniła się od poprzedniej wartości podczas brudnego sprawdzenia.
Neromancer

Odpowiedzi:

193

Dzięki Javie 7 możesz teraz bezpośrednio wykonać zerową bezpieczną równość:

Objects.equals (x, y)

(Biblioteka Jakarta Commons ObjectUtils.equals () stała się przestarzała w Javie 7)

Kdeveloper
źródło
Ta metoda jest również zaimplementowana w Googles Dependency injection-libray Guice.
Niels
1
Spring implementuje również podobną metodę: nullSafeEquals w klasie
ObjectUtils
2
Google Guava również ma Objects.equals ().
Spina
To jest tylko nullsafe w odniesieniu do x. Dla y zależy to od realizacji równości danego obiektu. (realizacja jest return (x == y) || (x != null && x.equals(y));)
emi-le
23

jeśli przypadkiem masz dostęp do biblioteki Jakarta Commons, jest tam ObjectUtils.equals () i wiele innych przydatnych funkcji.

EDYCJA: początkowo źle odczytano pytanie

Matt
źródło