1. teao26

    Posted

    teao26
Changes in title
+Androidのコードを 見やすく! 書きやすく! するアノテーション
Changes in tags
Changes in body
Source | HTML | Preview

Android開発をしていると、同じint型でもDrawableのidだったりLayoutのidだったり、はたまたアプリ内で使う独自の数値であったりと様々な使い分けを求められるシチュエーションが多々あります。
AndroidSDKにはそんなときに便利なコードを見やすく、書きやすくするアノテーションがandroid.support.annotation パッケージの中に入っています。
その一部の使い方をまとめてみました。

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

@NonNull
メソッドの引数にNullを許容しないことを明示できます。
これを指定していると呼び出し側が引数にNullを指定した場合に
Lintで Probable bugs の警告が出ます。
NonNull.png

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

@AnimRes @ColorRes @DrawableRes @IdRes @MenuRes @LayoutRes @StyleRes etc...
int型の内容を絞ることができます。
メソッドの引数に@DrawableResを付与した場合、受け取る値をdrawableのIDとして定義したものに限定することが出来ます。
呼び出し側でDrawableのリソースIDとして定義していないものをわたそうとした場合にエラーが表示されるようになります。
drawableres.png
また、メソッドに@DrawableResを付与した場合には、戻り値をdrawableのIDとして定義したものに限定することが出来ます。
retrun区でリソースIDとして定義していないものを返そうとした場合にエラーが表示されるようになります。
drawableres2.png
他のアノテーションも同様なので、用途によって使い分けると良いでしょう。

厳密にInteger型をつかう

@IntegerRes
リソースと同じようにメソッドの引数に付与することでInteger型に限定することが出来ます。
呼び出し側ではint型などInteger型でないものをわたそうとした場合にはエラーが表示されます。
int.png
また、メソッドに付与することでretrun区でもInteger型を返すことを明示することが出来ます。
int型などを返そうとした場合にはエラーになります。
int2.png

独自制約の作成

@IntDef @StringDef
使い方としてはEnumに近いです。
定数として定義した int もしくは String の値のうち使用できるものを指定することで、使える値を限定した独自のアノテーションを定義することが出来ます。
ここで生成した独自アノテーションをメソッドの引数に付与すると、受け取る値を指定した定数だけに限定することが出来ます。
呼び出し側は、指定した定数だけをわたすことができるようになります。定数と同じ値であっても定数を使わなければエラーになります。
def.png
また、独自アノテーションをメソッドに付与することで戻り値を限定することが出来ます。
引数のときと同じく、return区には指定した定数だけを記述することが出来ます。
def2.png