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