Question

Existe-t-il une méthode dans le JDK qui compare deux objets pour l’égalité, en tenant compte des valeurs NULL? Quelque chose comme ça:

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

Il semble ridicule d’écrire cette méthode moi-même car je pense qu’elle doit déjà exister quelque part.

Était-ce utile?

La solution

Java 7.0 a ajouté une nouvelle classe pratique: Objets .

Il a exactement une méthode pour cela: Objects.equals (Objet a, Objet b)

Autres conseils

Apache Commons Lang utilise une telle méthode: ObjectUtils.equals (object1, object2) . Vous ne voulez pas de génériques sur une telle méthode, cela conduirait à des erreurs de compilation factices, du moins en usage général. Equals sait très bien (ou devrait - cela fait partie du contrat) vérifier la classe de l'objet et renvoyer false, de sorte qu'il n'a pas besoin de sécurité supplémentaire.

FWIW, voici ma mise en œuvre:

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

Dans ma candidature, je sais que a et b seront toujours du même type, mais je suppose que cela fonctionne bien même s'ils ne le sont pas, à condition que a.equals () soit raisonnablement implémenté.

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

Si vous êtes inquiet à propos de NullPointerExceptions, vous pouvez simplement tester l'égalité, par exemple:

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

Le contrat général de equals () est qu'un objet non nul ne doit jamais être égal à une référence null et que la méthode equals () doit retourner false si vous comparez un objet à une référence null (et ne lancez pas de NPE).

Chaque fois que je rencontre un besoin et que je pense "c’est tellement courant que Java doit l’avoir" mais ne le trouve pas, je vérifie le projet Jakarta Commons. Il l'a presque toujours. Une recherche rapide dans l’API commons-lang (qui possède les utilitaires les plus élémentaires courants) montre un equals () qui fournit ce que vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top