Domanda

Esiste un metodo nel JDK che confronta due oggetti per l'uguaglianza, tenendo conto dei null? Qualcosa del genere:

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

Sembra sciocco scrivere questo metodo da solo poiché penserei che debba esistere già da qualche parte.

È stato utile?

Soluzione

Java 7.0 ha aggiunto una nuova classe utile: Oggetti .

Ha un metodo esattamente per questo: Objects.equals (Oggetto a, Oggetto b)

Altri suggerimenti

Apache Commons Lang ha un tale metodo: ObjectUtils.equals (oggetto1, oggetto2) . Non vuoi generici su un tale metodo, porterà a falsi errori di compilazione, almeno in uso generale. Equals sa molto bene (o dovrebbe - fa parte del contratto) controllare la classe dell'oggetto e restituire false, quindi non ha bisogno di alcuna sicurezza aggiuntiva di tipo.

FWIW, questa era la mia implementazione:

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

Nella mia applicazione, so che aeb sarà sempre dello stesso tipo, ma sospetto che funzioni bene anche se non lo sono, a condizione che a.equals () sia ragionevolmente implementato.

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

Se sei preoccupato per NullPointerExceptions puoi semplicemente testare l'uguaglianza come:

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

Il contratto generale di equals () è che un oggetto non null non dovrebbe mai essere uguale a un riferimento null e che il metodo equals () dovrebbe restituire false se si sta confrontando un oggetto con un riferimento null (e non si lancia un NPE).

Ogni volta che incontro un'esigenza e penso "questo è così comune che Java deve averlo" ma non lo trovo, controllo il progetto Jakarta Commons. Quasi sempre ce l'ha. Una rapida ricerca dell'API commons-lang (che ha le utilità di base più comuni) mostra un equals () che fornisce ciò che desideri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top