Existe um método estático padrão Java "nulo ou igual"?

101

Para economizar digitação e esclarecer meu código, existe uma versão padrão do método a seguir?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}
Chris Conway
fonte
Alguém pode dizer onde tal coisa é útil?
anjanb
2
Ele apenas permite que você ignore as verificações de nulos em seu método equals ().
Michael Myers
1
Se você estiver implementando uma coleção, seu método .contains (), quando fornecido "o" precisa ser testado "se essa coleção contém pelo menos um elemento e tal que (o == null? E == null: o.equals (e )). " Da mesma forma, seu método .remove () deve remover tal elemento.
newacct
6
Apenas meus dois centavos. Eu usaria: public static boolean bothNullOrEqual (Object x, Object y) {return (x == y || (x! = Null && x.equals (y))); } IMHO, é mais legível para programadores novatos.
m_vitaly
1
Outro caso de uso: compare um valor para ver se ele mudou de seu valor anterior durante uma verificação suja.
Neromancer

Respostas:

193

Com o Java 7 agora você pode fazer diretamente um cofre nulo igual a:

Objects.equals (x, y)

(A biblioteca ObjectUtils.equals () do Jakarta Commons tornou-se obsoleta com o Java 7)

Kdeveloper
fonte
Este método também é implementado no Googles Dependencyjection-libray Guice.
Niels de
1
Spring também implementa um método semelhante: nullSafeEquals na classe
ObjectUtils
2
O Google Guava também tem Objects.equals ().
Spina de
Isso é apenas nullsafe em relação a x. Para y, depende da implementação de equals do objeto fornecido. (a implementação é return (x == y) || (x != null && x.equals(y));)
emi-le
23

se por acaso você tiver acesso à biblioteca Jakarta Commons, há ObjectUtils.equals () e muitas outras funções úteis.

EDIT: interpretou mal a pergunta inicialmente

Matt
fonte