Pregunta

¿Hay un método en el JDK que compare dos objetos por igualdad, teniendo en cuenta los nulos? Algo como esto:

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 tonto escribir este método yo mismo, ya que creo que tiene que existir en algún lugar.

¿Fue útil?

Solución

Java 7.0 agregó una nueva clase práctica: Objetos .

Tiene un método exactamente para esto: Objects.equals (Objeto a, Objeto b)

Otros consejos

Apache Commons Lang tiene un método de este tipo: ObjectUtils.equals (object1, object2) . No desea los genéricos en este método, dará lugar a errores de compilación falsos, al menos en el uso general. Equals sabe muy bien (o debería, es parte del contrato) verificar la clase del objeto y devolver falso, por lo que no necesita ningún tipo de seguridad adicional.

FWIW, esta fue mi implementación:

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

En mi aplicación, sé que a y b siempre serán del mismo tipo, pero sospecho que esto funciona bien incluso si no lo son, siempre que a.equals () esté razonablemente implementado.

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

Si está preocupado por NullPointerExceptions, puede probar la igualdad como:

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

El contrato general de equals () es que un objeto no nulo nunca debe ser igual a una referencia nula, y que el método equals () debe devolver falso si está comparando un objeto con una referencia nula (y no arroja un NPE).

Cada vez que me encuentro con una necesidad y pienso que "esto es tan común, Java debe tenerlo" Pero no lo encuentro, reviso el proyecto de Jakarta Commons. Casi siempre lo tiene. Una búsqueda rápida de la API commons-lang (que tiene la más básica de las utilidades comunes) muestra un equals () método que proporciona lo que desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top