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