Frage

Gibt es ein Verfahren, in dem JDK, die zwei Objekte auf Gleichheit vergleicht, für nulls Buchhaltung? So etwas wie folgt aus:

public static boolean equals(Object o1, Object o2)
{
    if (o1 == null)
    {
        return o2 == null; // Two nulls are considered equal
    }
    else if (o2 == null)
    {
        return false;
    }

    return o1.equals(o2);
}

Es scheint dumm diese Methode selbst zu schreiben, da ich würde denken, dass es schon irgendwo vorhanden sein muss.

War es hilfreich?

Lösung

Java 7.0 hat ein neues handliches Klasse. Objects

Es hat eine Methode genau dafür: Objects.equals(Object a, Object b)

Andere Tipps

Apache Commons Lang hat eine solche Methode: ObjectUtils.equals (object1, object2) . Sie wollen nicht, Generika auf einem solchen Verfahren wird es zu falschen Kompilierungsfehlern führen, zumindest in den allgemeinen Gebrauch. Gleich sehr gut kennt (oder sollte - es ist Teil des Vertrages ist). Um die Klasse des Objekts zu überprüfen und false zurück, so dass es benötigt keine zusätzliche Typsicherheit

FWIW, das war meine Implementierung:

private static boolean equals(Object a, Object b) {
    return a == b || (a != null && a.equals(b));
}

In meiner Anwendung, weiß ich, dass a und b wird immer vom gleichen Typ sein, aber ich vermute, das funktioniert gut, auch wenn sie nicht, vorausgesetzt, dass a.equals () wird angemessen umgesetzt werden.

public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}

Wenn Sie sind besorgt über die Nullpointerexceptions Sie nur Gleichheit testen konnten wie:

if (obj1 != null && obj1.equals(obj2)) { ... }

Der allgemeine Vertrag von equals() ist, dass ein Nicht-Null-Objekt nie auf einen Null-Bezug gleich sein sollte, und dass die equals() Methode sollte falsch zurück, wenn Sie ein Objekt in eine Null-Referenz vergleichen (und kein NPE werfen).

Jedes Mal, wenn ich auf einen Bedarf kommen und denken, „dies so üblich ist Java muss es“, aber finde es nicht, überprüfe ich das Projekt Jakarta Commons. Es ist fast immer hat es. Eine schnelle Suche des commons-lang-API (die die grundlegendsten gemeinsamen Dienstprogramme hat) zeigt ein equals() Verfahren, das bietet, was Sie wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top