Pergunta

Existe um método no JDK que compara dois objetos de igualdade, representando nulos? Algo parecido com isto:

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

Parece bobagem para escrever este método mim desde que eu acho que tem que existir em algum lugar.

Foi útil?

Solução

Java 7.0 adicionou uma nova classe acessível:. Objects

Ele tem um método exatamente para isso: Objects.equals(Object a, Object b)

Outras dicas

Apache Commons Lang tem tal método um: ObjectUtils.equals (object1, object2) . Você não quer que os genéricos sobre tal método um, ele vai levar a erros de compilação falsos, pelo menos em uso geral. Igual sabe muito bem (ou deveria - é parte do contrato) para verificar a classe do objeto e retorno falso, por isso não precisa de qualquer tipo de segurança adicional

.

FWIW, esta foi a minha aplicação:

private static boolean equals(Object a, Object b) {
    return a == b || (a != null && a.equals(b));
}

Na minha aplicação, eu sei que a e b será sempre o mesmo tipo, mas eu suspeito que isso funciona bem, mesmo se eles não estão, desde que a.Equals () é razoavelmente implementado.

public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}

Se você está preocupado com NullPointerExceptions você poderia apenas a igualdade de teste como:

if (obj1 != null && obj1.equals(obj2)) { ... }

O contrato geral de equals() é que um objeto não nulo nunca deve ser igual a uma referência nula, e que o método equals() deve retornar falso se você está comparando um objeto para uma referência nula (e não jogar um NPE).

Sempre que me deparo com uma necessidade e pensar "isso é tão comum Java deve tê-lo", mas acham que ele não, eu verifico o projeto Jakarta Commons. É quase sempre tem. Uma rápida pesquisa do API commons-lang (que tem o mais básico de utilitários comuns) mostra uma equals() método que fornece o que você quer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top