Как отключить это неправильное предупреждение о ворсе для одного блока кода?

У меня есть небольшой код, который выдает неправильное предупреждение:

int myfunc(@Nullable valStr) {
    int val = -1;
    if (!TextUtils.isEmpty(valStr)) {
        try {
            val = valStr.startsWith("1-"); //<== lint warning here : NullPointerException
        } catch (Exception e) {
        }
    }

    return val;
}

Этот код выдает предупреждение о том, что valStr может быть null, что невозможно, потому что я проверил valStr с TextUtils.isEmpty(). Как я могу отключить это предупреждение для оператора блока if? Я не хочу отключать его для всей функции с @SuppressLint.


person Afshin    schedule 21.01.2020    source источник


Ответы (2)


Простой комментарий кода для отключения предупреждения:

//noinspection SimplifiableIfStatement

Это поверх оператора if должно отключить предупреждение только в этом месте.

В примере это будет:

int myfunc(@Nullable valStr) {
    int val = -1;

    //noinspection SimplifiableIfStatement
    if (!TextUtils.isEmpty(valStr)) {
        try {
            val = valStr.startsWith("1-"); //<== lint warning here : NullPointerException
        } catch (Exception e) {
        }
    }

    return val;
}
person Kalpesh Rupani    schedule 21.01.2020
comment
кажется, этот комментарий не работает в студии Android. как указано здесь: stackoverflow.com/questions/ 34340056/ - person Afshin; 21.01.2020

Вместо !TextUtils.isEmpty(valStr) сделайте valStr != null. Таким образом lint узнает, что вы проверили значение null.

В качестве альтернативы вы можете использовать assert следующим образом: assertNotNull(valStr)

person Webfreak    schedule 21.01.2020
comment
Этот метод очевиден. Но когда TextUtil.isEmpty() выполняет и то, и другое, я предпочитаю использовать эту функцию. - person Afshin; 21.01.2020
comment
На самом деле вам не нужно проверять, пусто ли оно, так как startWith вернет -1, если в ненулевой строке нет совпадения. - person Webfreak; 21.01.2020
comment
Код здесь — это просто простой код для отображения предупреждения. Мой реальный код более сложен, и его нужно запускать, когда он не пуст и не равен нулю. - person Afshin; 21.01.2020
comment
Я думаю, что вы должны использовать assert в этом случае. Проверьте обновленный ответ. - person Webfreak; 21.01.2020