﻿# V6101\. compareTo\(\)\-like methods can return not only the values \-1, 0 and 1, but any values\.

Анализатор обнаружил в коде сравнение результата метода 'Comparable\.compareTo' или ему подобному с конкретным ненулевым значением \(в частности, с 1 и \-1\)\. В свою очередь, в спецификации языка Java контракт этого метода подразумевает, что может вернуться любое положительное число или любое отрицательное\. 

Работоспособность конструкции 'compareTo \=\= 1' зависит от реализации этого метода\. Поэтому сравнивать результат с конкретным числом считается плохой практикой, которая в некоторых случаях может привести к трудноуловимым ошибкам\. В таких случаях корректно писать 'compareTo \> 0'\.    

В качестве примера можно привести следующий некорректный код:

```cpp
void smt(SomeType st1, SomeType st2, ....)
{
  ....
  if (st1.compareTo(st2) == 1)
  {
    // some logic
  }
  ....
}
```

Разработчик долгое время мог работать над другим проектом, где, в силу специфики реализации интерфейса 'Comparable', сравнивать результат 'compareTo' с 1 было корректно\. Перейдя на следующий проект, он продолжил так сравнивать, но специфика реализации метода уже отличалась \- в зависимости от тех или иных условий возвращались разные положительные числа\. 

Исправленный вариант кода:

```cpp
void smt(SomeType st1, SomeType st2, ....)
{
  ....
  if (st1.compareTo(st2) > 0)
  {
    // some logic
  }
  ....
}
```

Анализатор также считает код ошибочным, если в нём сравнивается результат работы двух 'compareTo' методов\. Подобный код встречается крайне редко, однако на него в любом случае стоит обратить внимание\.