前提
Support Annotationというライブラリ(Support Libraryについてくる)にあるアノテーションの@Nullable
をつけたメンバ変数などのメソッドなどにアクセスしようとするとAndroid Studio上で警告が表示されます。(逆に@NonNull
がついていれば警告は表示されません。)
これを使っていけばある程度NullPointerExceptionを防止できます。
動機
@Nullable
や@NonNull
をつけようと思っても癖にならずサボってしまっていて自分には面倒で続いていませんでした。。
そこで、いろんな変数がデフォルトで@Nullable
扱いになれば警告が出まくって、気をつけるようになるのではということで、そのオプションを探してみました。
設定方法
File | Settings | Editor | Inspections | Probable bugs | Constant conditions & exceptionsで
Treat non-annotated members and parameters as @Nullable
にチェックを付けます
適用
適用前 | |
適用後 |
まとめ
この警告が出ないように直していくことでNPEが少しは改善していけるのではないかと思います。
ただAndroidのフレームワークのメソッドも@NonNull
などを導入してくれていないメソッドが結構あるので、防止しきれない部分や冗長なNullチェックが必要になる部分もあるようなので、そこは気をつけていく必要があります。
Analyze | Infer Nullity Annotationでうまく自動で@Nullableや@NonNullのアノテーションを入れられるようなのですが、自分の環境ではなぜか読み込みが終わらずうまく動かなかったです。
Kotlinを使えばこういうのも言語仕様的に解決してくれているようなので、Kotlinが利用できる人はKotlinを利用するのをおすすめします。
NPEをこうやって防いでいるなどの知見がほしいのでもっといい感じの方法を知っている方はお教えください。