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) );
}

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)


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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.