Подавить потенциальное исключение 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 никогда не произойдет. Но ваш код будет выглядеть грязным, и для меня это раздражает.