Gibt es eine statische Java-Standardmethode "beide null oder gleich"?

101

Gibt es eine Standardversion der folgenden Methode, um die Eingabe zu speichern und meinen Code zu verdeutlichen?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}
Chris Conway
quelle
Kann jemand sagen, wo so etwas nützlich ist?
Anjanb
2
Sie können nur Nullprüfungen in Ihrer equals () -Methode überspringen.
Michael Myers
1
Wenn Sie eine Sammlung implementieren, muss Ihre .contains () -Methode, wenn "o" angegeben ist, testen, ob diese Sammlung mindestens ein Element e enthält, so dass (o == null? E == null: o.equals (e )). " Ebenso muss Ihre .remove () -Methode ein solches Element entfernen.
Newacct
6
Nur meine zwei Cent. Ich würde verwenden: public static boolean bothNullOrEqual (Objekt x, Objekt y) {return (x == y || (x! = Null && x.equals (y))); } IMHO, es ist besser für Anfänger Programmierer.
m_vitaly
1
Ein weiterer Anwendungsfall: Vergleichen Sie einen Wert, um festzustellen, ob er sich während einer schmutzigen Prüfung von seinem vorherigen Wert geändert hat.
Neromancer

Antworten:

193

Mit Java 7 können Sie jetzt direkt einen Null-Safe gleichsetzen:

Objects.equals (x, y)

(Die Jakarta Commons-Bibliothek ObjectUtils.equals () ist mit Java 7 veraltet.)

Entwickler
quelle
Diese Methode ist auch in Googles Dependency Injection-Libray Guice implementiert.
Niels
1
Spring implementiert auch eine ähnliche Methode: nullSafeEquals auf ObjectUtils-Klasse
jpsstavares
2
Google Guava hat auch Objects.equals ().
Spina
Dies ist nur nullsicher in Bezug auf x. Für y hängt es von der Implementierung von Gleichheiten des gegebenen Objekts ab. (die Implementierung ist return (x == y) || (x != null && x.equals(y));)
emi-le
23

Wenn Sie zufällig Zugriff auf die Jakarta Commons-Bibliothek haben, gibt es ObjectUtils.equals () und viele andere nützliche Funktionen.

EDIT: Die Frage zunächst falsch verstanden

Matt
quelle