V6054. Classes should not be compared by their name.
Анализатор обнаружил ситуацию, когда сравнение классов осуществляется по имени. Такое сравнение является некорректным, т.к. согласно спецификации JVM классы имеют уникальное имя только внутри пакета.
Помимо логических ошибок, такой код может в некоторых случаях привести к различным уязвимостям, поскольку не известно, какое поведение у непроверенного класса.
Пример:
if (obj.getClass().getSimpleName().equals("Plane"))
{
....
}
Такой код следует переписать следующим образом:
if(obj.getClass().equals(ArrayList.class))
{
....
}
либо:
if (obj instanceof Plane)
{
....
}
или же:
if (obj.getClass().isAssignableFrom(Plane.class))
{
....
}
Данная диагностика классифицируется как:
|
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6054. |