Вебинар: Go-Go-Gadg...Error? Смотрим, как ошибаются Go разработчики! - 26.08
Анализатор обнаружил, что в переопределённом методе equals отсутствует проверка аргумента на null, что нарушает стандартный контракт.
Рассмотрим пример:
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (getClass() != object.getClass()) {
return false;
}
Foo another = (Foo) object;
return type.equals(another.type) &&
name.equals(another.name);
}
В методе equals реализована проверка на совпадение классов и сравнение полей. Однако разработчик не учёл вариант, что в качестве аргумента может поступить нулевая ссылка. Это приведёт к выбросу исключения NullPointerException в момент вызова getClass.
Согласно документации переопределение метода Object.equals должно возвращать false при передаче нулевой ссылки, а не генерировать исключение. Это особенно важно в случае, если класс используется в коллекциях.
Исправленный вариант:
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object == null || getClass() != object.getClass()) {
return false;
}
Foo another = (Foo) object;
return type.equals(another.type) &&
name.equals(another.name);
}
Диагностическое правило классифицируется как:
Была ли полезна эта страница документации?
Мы ответим вам на:
Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок: