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

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.)


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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.