Подавить потенциальное исключение NullPointerException в Android Studio
Это:
@Nullable
Item[] mItems;
public Item getItem(int position) {
return mItems[position];
}
выдает предупреждение:
Array access 'mItems[position]' may produce NullPointerException
Я хочу подавить это предупреждение (я знаю, что getItem()
не будет вызываться, если mItems
равно null).
Я пробовал использовать следующие аннотации:
-
@SuppressWarnings({"NullableProblems"})
-
@SuppressWarnings({"null"})
а также с обозначением //noinspection
, но все они не работают.
Использование @SuppressWarnings({"all"})
работает, но это явно не то, что я ищу.
Android Studio не предлагает опции подавления, когда я нажимаю alt + enter, просто параметры для добавления (бесполезной) нулевой проверки.
Ответы
Ответ 1
Это работает для меня, но не уверен, почему AS захочет использовать постоянные условия в качестве супрессора. Я думаю, что это имеет какое-то отношение к проверке null, поскольку это постоянное условие (т.е. Оно всегда не будет равно null).
@Nullable
Item[] mItems;
@SuppressWarnings("ConstantConditions")
public Item getItem(int position) {
return mItems[position];
}
Ответ 2
Если вы хотите, чтобы Android Studio не беспокоила вас этими предупреждениями, сохраняя их в компиляторе, просто перейдите в "Настройки" → "Редактор" → "Инспекции" → "Условия и исключения" и снимите флажок.
Если вместо этого вы хотите полностью удалить его, используйте соответствующие SuppressWarnings, как предложено другими ответами:
@SuppressWarnings("ConstantConditions")
Ответ 3
Для меня @SuppressWarnings
не получилось. Я просто добавляю инструкцию assert
перед предупреждениями, чтобы заставить ее уйти.
Ваш код должен выглядеть так:
@Nullable
Item[] mItems;
public Item getItem(int position) {
assert mItems != null;
return mItems[position];
}
Я знаю, что вы сказали, что уверены, что getItem()
не будет вызываться, если mItems
есть null
. Тем не менее, инспектор не учтет, что вы уже проверяете перед вызовом функции, следовательно, предупреждение.
Или вы можете просто оставить его, так как mItems = null
никогда не произойдет. Но ваш код будет выглядеть грязным, и для меня это раздражает.