Анализатор обнаружил потенциальную ошибку, которая может привести к использованию нулевого объекта.
Анализатор заметил в коде следующую ситуацию. Вначале объект используется. А уже затем этот объект проверяется на значение 'null'. Это может означать одно из двух:
1) Возникнет ошибка, если объект будет равен 'null'.
2) Программа всегда работает корректно, так как объект всегда не равен null. Проверка является лишней.
Рассмотрим фрагмент кода, на котором анализатор выдаст предупреждение:
boolean isSomething(String str) { String prepareStr = prepare(str); if (prepareStr.contains("*?*")) { ... } ... return prepareStr == null ? false : prepareStr.contains("?*?"); }
Итак, в вышеприведенном примере потенциальная ошибка или лишнее сравнение? Сначала с переменной 'prepareStr' идут какие-то вычисления, а в конце она проверяется на null. Здесь имеет место быть возможен как первый, так и второй случай. Если все же метод 'prepare' может вернуть null, то необходимо внести изменения в код:
boolean isSomething(String str) { String prepareStr = prepare(str); if (prepareStr == null) { return false; } if (prepareStr.contains("*?*")) { //... } //... return prepareStr.contains("?*?"); }
Если же 'prepare' не возвращает 'null', то просто можно убрать сравнение с null, чтобы не путать ваших коллег-разработчиков.
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6060. |