Annotations Support Library が Android Studio 0.5.5 でサポートされた
Annotations Support Library の概要
ちゃんとしたドキュメントが見当たらないのですが、 *1 Android Support library のリビジョン 19.1.0 から、新たに Annotations Support Library が追加されました。 このライブラリは、その名のとおり Android アプリ開発時に用いることができるアノテーションの集まりです。 例えば、@NonNull
や @Nullable
といったアノテーションが含まれています。
さらに、Android Studio ではバージョン 0.5.5 からこれらのアノテーションをサポートしており、アノテーションを使うことでいろいろと警告を出してくれるようになっています。
Support for the new annotations which shipped with the most recent version of the support library, such as
Android Studio 0.5.5 Released - Android Tools Project Site@NonNull
and@Nullable
, as well as annotations to declare resource types and valid constants. Add a dependency oncom.android.support:support-annotations:+
to use these in your projects. In the upcoming 0.10.x version of the Android Gradle plugin, the plugin will extract these annotations into your libraries' AAR files such that clients of your library can get the same resource type checks as is shown above for the SDK APIs.
Android Support library については前に記事を書きましたので、合わせて参照ください。
Support Annotation についての公式的なドキュメントは次のページをご覧ください。
Annotations Support Library の使い方
ビルドシステムに Gradle を使っている場合についての説明です。
Android SDK Manager で 「Android Support Repository」 (リビジョン 5 以上) をインストールしたうえで、build.gradle に次のように記述することで Annotations Support Library を使用できます。
dependencies { compile 'com.android.support:support-annotations:22.2.0' // バージョン番号は必要に応じて変更してください。 }
使用できるアノテーション紹介
どういうアノテーションがあるのかを紹介します。 バージョン 19.1.0 時点での情報ですので、新しいバージョンでは使用できるアノテーションが増えているかもしれません。
@NonNull
と @Nullable
これらは、メソッドの返り値が null
になりうるかどうかや、メソッドのパラメータとして null
を許容するかどうか、といったことを表すのに用いられます。
private void displayName(@NonNull String name) { // ... }
例えば、引数として null
を許容しないメソッドを定義する場合、上のように @NonNull
アノテーションを用いて null
を許容しないことを表現できます。
そして、そのように定義されたメソッドの呼び出し時に null
を引数として渡すようなコードを書くと、Android Studio 上で次のように警告が表示されます。
私は null
になりうる変数には xxxOrNull
みたいな名前を付けるといった命名規則などで null
周りのバグを減らすように気を付けたりしているのですが、アノテーションと IDE によるサポートがあると便利で良さそうですね。
どの種類のリソースを参照するための int
値なのかを示すアノテーション
Android アプリで使用する各種リソースは int
値で参照されます。 どの種類のリソースでも同じ int
型で表されるので、Drawable のリソース ID を受け取るメソッドに、Drawable 以外のリソースの ID を渡すといったことや、そもそもリソースの ID でない単なる数値を渡すといったことも (コード上は) 可能です。
Annotations Support Library には、どの種類のリソースの ID なのかを示すためのアノテーションも含まれています。 例えば、Drawable リソースであることを示すアノテーションは @DrawableRes
アノテーション です。
private void receiveDrawableRes(@DrawableRes int resId) { // ... }
例えば、引数として Drawable リソースの ID を受け取るメソッドを定義する場合、上のように @DrawableRes
アノテーションを付けて、引数が Drawable リソースの ID であることを示せます。
このメソッドに Drawable 以外のリソースの ID を渡すと、次のように Android Studio がエラー表示してくれます。
@DrawableRes
アノテーションの他にも、@AnimRes
や @ColorRes
、@StringRes
といった、各種リソースに対応したアノテーションが存在します。
@IntDef
と @StringDef
定数として定義したいくつかの int
型 (あるいは String
型) の値のうちのいずれかを引数として受け取るメソッドを書きたい、ということがままあります。 そんなときに便利なのがこれらのアノテーションです。
普通にメソッドを定義すると、任意の int
値を受け取れるようになってしまいますが、これらのアノテーションを用いて独自のアノテーションを定義することで、メソッドが指定の定数のみを受け取ることを示すことができます。
@IntDef
アノテーションを用いて、独自のアノテーション (@NavigationMode
アノテーション) を定義する例は次のような感じです。
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS}) public @interface NavigationMode {} public static final int NAVIGATION_MODE_STANDARD = 0; public static final int NAVIGATION_MODE_LIST = 1; public static final int NAVIGATION_MODE_TABS = 2;
そして、上で定義されたアノテーションを使い、NAVIGATION_MODE_STANDARD
、NAVIGATION_MODE_LIST
、NAVIGATION_MODE_TABS
のいずれかの値を受け取るメソッドであることを次のように示せます。
private void navigate(@NavigationMode int navMode) { // ... }
呼び出し時には定数を使って値を指定しないと、次のようにエラーが表示されます。
まとめ
Android Support library のリビジョン 19.1.0 で Annotations Support Library が追加され、Android Studio 0.5.5 でそれらのアノテーションがサポートされました。
著しく開発効率が上がったり、本質的な機能の向上があるわけではなく、あくまで開発の補助に使用できるものではありますが、地味に便利だと思います。 せっかく Android Studio でこのようなアノテーションがサポートされたのですから使っていきましょう!
- 作者: TechBooster,小太刀御禄,出村成和,重田大助,西岡靖代,宮川大輔,柏本和俊,あんざいゆき,八木俊広,木村尭海,小林慎治,有山圭二,中西良明,わかめまさひろ,新井祐一,桝井草介,久郷達也,寺園聖文,shige0501,山下智樹,前田章博,秋葉ちひろ,末広尚義,中澤慧,日高正博,塚田翔也,井形圭介,中川幸哉,山崎誠,山下武志,なまそで,橋爪香織,さとうかずのり,l_b__,ゼロハチネット,長汐祐哉
- 出版社/メーカー: インプレスジャパン
- 発売日: 2014/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (8件) を見る
変更履歴
- 2015-06-13 : 「support-annotations ライブラリ」 と記述していたのを 「Annotations Support Library」 に変更。
*1:最近公式的なドキュメントも書かれました。