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ść:
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.
Odpowiedzi:
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)
źródło
return (x == y) || (x != null && x.equals(y));
)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
źródło
Jeśli używasz <1.7, ale masz dostępną guawę:
Objects.equal(x, y)
źródło