У меня много таких звонков:
(ListView) getView().findViewById(R.id.main_list_view);
(TextView) getView().findViewById(R.id.items_no);
....
и AndroidStudio сообщает мне, что они могут создать NullPointerException
:
Вызов метода
getView().findViewById(R.id.main_list_view)
может произвести наjava.lang.NullPointerException
меньше... (Ctrl+F1)Эта проверка анализирует управление методом и поток данных, чтобы сообщить о возможных условиях, которые всегда истинны или ложны, о выражениях, значение которых статически подтверждено как постоянное, и о ситуациях, которые могут привести к нарушениям контракта, допускающим значение NULL.
Переменные, параметры метода и возвращаемые значения, помеченные как
@Nullable
или@NotNull
, обрабатываются как обнуляемые (или не нулевые, соответственно) и используются во время анализа для проверки контрактов на обнуляемость, например. сообщить о возможныхNullPointerException
ошибках.Более сложные контракты можно определить с помощью аннотации
@Contract
, например:
@Contract("_, null -> null")
— метод возвращает null, если его второй аргумент равен null@Contract("_, null -> null; _, !null -> !null")
— метод возвращает null, если его второй аргумент равен null, и не null в противном случае
@Contract("true -> fail")
— типичный методassertFalse
, который выдает исключение, если ему передается trueПроверка может быть настроена на использование пользовательских аннотаций
@Nullable
@NotNull
(по умолчанию будут использоваться аннотации из annotations.jar)
К счастью, все работает, но можно ли улучшить этот код?