Existe-t-il une méthode statique standard Java «à la fois nulle ou égale»?


101

Pour économiser de la saisie et clarifier mon code, existe-t-il une version standard de la méthode suivante?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}

Quelqu'un peut-il dire où une telle chose est utile?
anjanb

2
Cela vous permet simplement de sauter les vérifications nulles dans votre méthode equals ().
Michael Myers

1
Si vous implémentez une Collection, votre méthode .contains (), lorsqu'elle est donnée "o" doit tester "si cette collection contient au moins un élément e tel que (o == null? E == null: o.equals (e )). " De même, votre méthode .remove () doit supprimer un tel élément.
newacct

6
Juste mes deux cents. J'utiliserais: public static boolean bothNullOrEqual (Object x, Object y) {return (x == y || (x! = Null && x.equals (y))); } À mon humble avis, il est plus lisible pour les programmeurs novices.
m_vitaly

1
Autre cas d'utilisation: comparez une valeur pour voir si elle a changé par rapport à sa valeur précédente lors d'une vérification incorrecte.
Neromancer

Réponses:


193

Avec Java 7, vous pouvez maintenant faire directement un nul sûr égal:

Objects.equals (x, y)

(La bibliothèque Jakarta Commons ObjectUtils.equals () est devenue obsolète avec Java 7)


Cette méthode est également implémentée dans Googles Dependency injection-libray Guice.
Niels

1
Spring implémente également une méthode similaire: nullSafeEquals sur la classe
ObjectUtils

2
Google Guava a également Objects.equals ().
Spina

Ce n'est que nullsafe concernant x. Pour y, cela dépend de l'implémentation des égaux de l'objet donné. (la mise en œuvre est return (x == y) || (x != null && x.equals(y));)
emi-le

23

si par hasard vous avez accès à la bibliothèque Jakarta Commons, il y a ObjectUtils.equals () et beaucoup d'autres fonctions utiles.

EDIT: mal lu la question au départ


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.