Edited at

Androidのコードを 見やすく! 書きやすく! するアノテーション

More than 3 years have passed since last update.

Android開発をしていると、同じint型でもDrawableのidだったりLayoutのidだったり、はたまたアプリ内で使う独自の数値であったりと様々な使い分けを求められるシチュエーションが多々あります。

Android Support libraryにはそんなときに便利なコードを見やすく、書きやすくするアノテーションがandroid.support.annotation パッケージの中に入っています。

その一部の使い方をまとめてみました。

2016/03/22 追記

その2も記載しました

Androidのコードを 見やすく! 書きやすく! するアノテーション その2


メソッドの引数にNullを許容しない

@NonNull

メソッドの引数にNullを許容しないことを明示できます。

これを指定していると呼び出し側が引数にNullを指定した場合に

Lintで Probable bugs の警告が出ます。

NonNull.png


引数や戻り値を特定のリソースIDに限定する

@AnimRes @ColorRes @DrawableRes @IdRes @MenuRes @LayoutRes @StyleRes @IntegerRes etc...

int型の内容を絞ることができます。

メソッドの引数に@DrawableResを付与した場合、受け取る値をdrawableのIDとして定義したものに限定することが出来ます。

呼び出し側でDrawableのリソースIDとして定義していないものをわたそうとした場合にエラーが表示されるようになります。

drawableres.png

また、メソッドに@DrawableResを付与した場合には、戻り値をdrawableのIDとして定義したものに限定することが出来ます。

retrun区でリソースIDとして定義していないものを返そうとした場合にエラーが表示されるようになります。

drawableres2.png

他のアノテーションも同様なので、用途によって使い分けると良いでしょう。


独自制約の作成

@IntDef @StringDef

使い方としてはEnumに近いです。

定数として定義した int もしくは String の値のうち使用できるものを指定することで、使える値を限定した独自のアノテーションを定義することが出来ます。

ここで生成した独自アノテーションをメソッドの引数に付与すると、受け取る値を指定した定数だけに限定することが出来ます。

呼び出し側は、指定した定数だけをわたすことができるようになります。定数と同じ値であっても定数を使わなければエラーになります。

def.png

また、独自アノテーションをメソッドに付与することで戻り値を限定することが出来ます。

引数のときと同じく、return区には指定した定数だけを記述することが出来ます。

def2.png