V6058. Comparing objects of incompatible types.
Анализатор обнаружил потенциальную ошибку, связанную с вызовом функции сравнения для несовместимых по типу объектов. Анализатор выдает предупреждения на некорректное использование таких функций как equals, assertEquals, assertArrayEquals и т.д.
Разберем ошибочные случаи сравнения:
Пример 1:
String param1 = ...;
Integer param2 = ...;
...
if (param1.equals(param2))
{...}
Пример 2:
List<String> list = Arrays.asList("1", "2", "3");
Set<String> set = new HashSet<>(list);
if (list.equals(set))
{...}
В обоих примерах сравниваются объекты с несовместимыми типами. Результат их сравнения всегда будет false, так как в реализациях 'equals' есть проверка на соответствие пришедшего объекта с текущим.
Для String:
public boolean equals(Object anObject)
{
...
if (anObject instanceof String)
{
...
}
return false;
}
Для List:
public boolean equals(Object o)
{
...
if (!(o instanceof List))
return false;
...
}
Если V6058 в вашем коде, то скорее всего это ошибка, и сравнивать надо другие объекты.
Пример 1:
...
String param1 = ...;
String param3 = ...;
...
if (param1.equals(param3))
{...}
Пример 2:
...
List<String> list = Arrays.asList("1", "2", "3");
List<String> list2 = ...;
...
if (list.equals(list2))
{...}
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6058. |