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

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)


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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.