web-dev-qa-db-ja.com

Android Studioで潜在的なNullPointerExceptionを抑制する

この:

_@Nullable
Item[] mItems;

public Item getItem(int position) {
    return mItems[position];
}
_

警告を生成します:

_Array access 'mItems[position]' may produce NullPointerException
_

この警告を抑制したい(mItemsがnullの場合、getItem()は呼び出されないことを知っている)。

次の注釈を使用してみました。

  • @SuppressWarnings({"NullableProblems"})
  • @SuppressWarnings({"null"})

_//noinspection_表記と同様ですが、すべて機能していません。

@SuppressWarnings({"all"})を使用しても機能しますが、明らかに私が探しているものではありません。

Android Studioは、ヒットしたときに抑制オプションを提供しません alt + enter、(無駄な)nullチェックを追加するオプションのみ。

29
minipif

これはうまくいきますが、ASがサプレッサーとして一定の条件を使用する理由がわかりません。それは一定の条件であるため、nullスキップチェックと関係があると思います(つまり、常にnullではありません)。

@Nullable
Item[] mItems;

@SuppressWarnings("ConstantConditions")
public Item getItem(int position) {
    return mItems[position];
}
46
zerobasedindex

Android Studioがそれらの警告をコンパイラーに邪魔することを邪魔しないようにする場合は、[設定]-> [エディター]-> [検査]-> [定数条件と例外]に移動して、チェックを外します。

代わりに完全に削除する場合は、他の回答で提案されている適切なSuppressWarningsを使用します。

@SuppressWarnings("ConstantConditions")
16
sam

私にとって_@SuppressWarnings_は機能しませんでした。警告の前にassertステートメントを追加して、警告を消しています。

コードは次のようになります。

_@Nullable
Item[] mItems;

public Item getItem(int position) {
    assert mItems != null;
    return mItems[position];
}   
_

mItemsnullの場合、getItem()は呼び出されないと確信していると言ったことは知っています。ただし、インスペクタは、関数を呼び出す前にすでにチェックしていることを考慮しないため、警告が発生します。

または、_mItems = null_は決して発生しないため、そのままにしておくことができます。しかし、あなたのコードはちょっと厄介に見え、私にとっては迷惑です。

6
Hùng Lý

@SuppressWarnings( "ConstantConditions")は私のためにトリックを行います。

2
Lukas Felber