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) );
}
Chris Conway
la source
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)

Kdeveloper
la source
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

Mat
la source