Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V6134. It is not recommended to throw exceptions from the 'equals' method.

06 Мар 2026

Анализатор обнаружил, что в методе equals происходит явный выброс исключения. Такое поведение нежелательно, поскольку этот метод может использоваться там, где выброс исключения не подразумевается. Это может происходить как в пользовательском коде, так и при работе со стандартной библиотекой.

Рассмотрим пример:

class User {
  ....
  @Override
  public boolean equals(Object o) {
    if (o == null) {
      throw new IllegalArgumentException("....");
    }
    ....
  }
}

По контракту метод Object.equals возвращает false, если в качестве аргумента был передан null. В переопределении метода вместо этого происходит выброс исключения IllegalArgumentException. Это может привести к проблеме, когда объект используется в коллекции. Рассмотрим на примере:

List<User> users = new ArrayList<>();
users.add(null);
users.add(new User("a@example.com"));
//....
users.contains(new User("b@example.com")); // IllegalArgumentException

Метод ArrayList.contains использует внутри себя equals для сравнения переданного аргумента с элементами коллекции. Поскольку коллекция содержит объект, ссылающийся на null, при его передаче в метод equals произойдёт выброс IllegalArgumentException.

Чтобы избежать подобных проблем, рекомендуется вместо выброса исключения возвращать соответствующее значение типа boolean.

Исправленный пример:

@Override
public boolean equals(Object o) {
  if (o == null) {
    return false;
  }
  ....
}