Подтвердить что ты не робот

Сравните два объекта с проверкой на null

Есть ли метод в JDK, который сравнивает два объекта для равенства, учитывая нули? Что-то вроде этого:

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

Кажется глупым писать этот метод сам, так как я думаю, что он должен существовать уже где-то.

4b9b3361

Ответ 2

Apache Commons Lang имеет такой метод: ObjectUtils.equals(object1, object2). Вы не хотите генерировать такие методы, это приведет к ложным ошибкам компиляции, по крайней мере, в общем использовании. Equals отлично знает (или должен - это часть контракта) проверять класс объекта и возвращать false, поэтому он не нуждается в дополнительной безопасности типа.

Ответ 3

FWIW, это была моя реализация:

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

В моем приложении я знаю, что a и b всегда будут одного и того же типа, но я подозреваю, что это работает отлично, даже если они не являются, при условии, что a.equals() разумно реализовано.

Ответ 4

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

Ответ 5

Если вы беспокоитесь о NullPointerExceptions, вы можете просто проверить равенство, например:

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

Общий контракт equals() заключается в том, что объект, не содержащий нуль, никогда не должен быть равен нулевой ссылке и что метод equals() должен возвращать значение false, если вы сравниваете объект с нулевой ссылкой (а не бросаете NPE).

Ответ 6

Всякий раз, когда я сталкиваюсь с необходимостью и думаю, что "это так распространено, что Java должно иметь это", но найти это не так, я проверяю проект Jakarta Commons. Это почти всегда есть. Быстрый поиск API-интерфейса commons-lang (который имеет самые простые общие утилиты) показывает equals() метод, который обеспечивает то, что вы хотите.