Comparer deux objets avec un chèque de la valeur null
Est-il une méthode dans le JDK qui compare deux objets pour l'égalité, de la comptabilité pour les nuls? Quelque chose comme ceci:
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 idiot d'écrire cette méthode moi-même car je pense qu'il existe déjà quelque part.
Vous devez vous connecter pour publier un commentaire.
Java 7.0 ajout d'une nouvelle pratique de classe:
Objets
.Il a une méthode exactement à cela:
Objets.est égal à(l'Objet a, l'Objet b)
Apache Commons Lang a une telle méthode: ObjectUtils.equals(objet1, objet2). Vous ne voulez pas que des génériques sur une telle méthode, il va conduire à de fausses erreurs de compilation, au moins dans l'usage général. Est égal sait très bien (ou devrait - il fait partie du contrat) pour vérifier la classe de l'objet et renvoie la valeur false, donc il n'a pas besoin de tout type supplémentaire de sécurité.
FWIW, c'était ma mise en œuvre:
Dans mon application, je sais que a et b sera toujours le même type, mais je crois que cela fonctionne bien, même si elles ne sont pas, à condition qu'un.equals() est raisonnablement mis en œuvre.
Objects.equals(Object a, Object b)
return (a == null) ? (a == b) : a.equals(b);
semble bien plus lisible que ce que vous avez là (même si elle appelle égal pour le même objet).Si vous êtes inquiet au sujet de NullPointerExceptions vous pouvez simplement tester l'égalité comme:
Les conditions générales du contrat de
equals()
est qu'un objet non-null ne doit jamais être égale à une référence nulle, et que laequals()
méthode doit retourner false si vous comparez un objet à une référence null (et ne pas jeter un NPE).Chaque fois que je tombe sur un besoin et pense que "c'est tellement répandue Java doit avoir" mais ça ne marche pas, j'ai vérifier le projet Jakarta Commons. Il a presque toujours elle. Une recherche rapide sur commons-lang API (qui a les plus élémentaires de la commune utilitaires) montre un
equals()
méthode qui fournit ce que vous voulez.Jakarta Commons Lang API a ce que vous cherchez ObjectUtils.equals(Object,Object)