JSR 305’s @ParametersAreNonnullByDefault
を使うと, @Nullable
でアノテートされていないメソッド, 引数, フィールドが @NonNull
アノテートされているように解釈され, @NonNull
アノテートされているのと同じ振る舞いになります.
プロジェクトによっては, @NonNull
を明示することが煩わしく, @Nullable
のみを定義することにして, それ以外は @NonNull
扱いとするルールを採用しているところもあるかと思います.
ただ, これではIDEが提供するNull安全のインスペクションメッセージによる恩恵を受けることができず, 実装者が “@Nullable
をつけ忘れていた” なんて悲劇を招く可能性もあります.
“Tool, not Rules” ということで, デフォルトの振舞いを @NonNull
にしたいときは, @ParametersAreNonnullByDefault
が使えます.
このアノテーションはクラス単位でつけることもできますが, 例えば次のようにパッケージ単位でも指定できるため, プロジェクトのデフォルト設定としても役に立ちます.
com.android.myapp
フォルダに↓のような package-info.java
を用意すれば, パッケージ単位で @NonNull
アノテーションが有効になります.
// com.android.myapp.package-info.java
@javax.annotation.ParametersAreNonnullByDefault
package com.android.myapp;
JavaからKotlin化する際には @Nullable
/ @NonNull
が定義されていると, とても移行しやすいですのでおすすめです.
以上です.