dependencies { compile "com.android.support:support-annotations:22.0.2" }

public static final int SIZE_L = 0; public static final int SIZE_M = 1; public static final int SIZE_S = 2; @Retention(RetentionPolicy.SOURCE) @IntDef({SIZE_L, SIZE_M, SIZE_S}) public @interface Size { } @Size public abstract int getSize(); public abstract void setSize(@Size int size);

public static final String FORMAT_XML = "xml"; public static final String FORMAT_JSON = "json"; @Retention(RetentionPolicy.SOURCE) @StringDef({FORMAT_XML, FORMAT_JSON}) public @interface FORMAT { } public abstract void fetchData(@FORMAT String format);

public static final int SHOW_TITLE = 0x1; public static final int SHOW_SUB_TITLE = 0x2; public static final int SHOW_ICON = 0x4; @Retention(RetentionPolicy.SOURCE) @IntDef(flag = true, value = { SHOW_TITLE, SHOW_SUB_TITLE, SHOW_ICON, }) public @interface TitleOptions { }

BinderThread

CallSuper

CheckResult

ColorInt

FloatRange

IntRange

Keep

MainThread

RequiresPermission

Size

TransitionRes

UiThread

WorkerThread

@RequiresPermission(Manifest.permission.NFC) public abstract void scanNfc();

利用するには dependencies に追加します。参考上記のドキュメントに書いてありますが、例えば@Nullable を指定している変数に対して NPE になるようなコードを書くと警告してくれます。alt + enter で修正候補がでます。2番目の Replace with 'd != null ?:' を選択するとこんな感じになります。@NonNull が指定された変数に null を渡そうとすると警告してくれます。リソースIDはどれも int なので、Drawable のリソースIDを意図しているところに別のリソースIDを渡すことができてしまいます。そこで Drawable のリソースIDを意図しているところに @DrawableRes を付けると、別のリソースIDを渡そうとしたところがエラーになります。@StringRes や @LayoutRes など主要なものはそろっています。なにがあるかは package summary で確認してください。@IntDef や @StringDef では、int や String に対して取りうる値のセットが定義されたアノテーションを作ることができます。@IntDef は enum だけでなく flag としても使うことができます。詳しくは Creating Enumerated Annotations を見るとよいです。22.2.0 で新しく 13個のアノテーションが追加されました。上記のドキュメント及び android.support.annotation のパッケージサマリーにはまだないですが、そのうち更新されるでしょう。Android Studio を 1.3 にしないと警告やエラーがでてくれないので注意です。MainThread, WorkerThread, (BinderThread, UiThread), FloatRange, IntRange, Size, CallSuper, CheckResult, ColorInt, RequiresPermission は Google I/O 2015 のセッション「 What's New in Android Development Tools 」で紹介されていました。- BinderThread- MainThread- UiThread- WorkerThreadメソッドやクラスの実行スレッドを明記する。クラスにつけた場合はそのクラスのメソッド全てが対象になります。MainThread と UiThread の違いがわからない...↓バックグラウンドで @MainThread のメソッドを呼ぶと怒られます。↓@MainThread がついてるメソッドで @WorkerThread のメソッドを呼ぶと怒られます。- FloatRange- IntRange- Size↓@FloatRangeの範囲外の値を指定すると怒られます。Float とついているが double にも使えます。↓@IntRangeの範囲外の値を指定すると怒られます。Int とついているが long にも使えます。@Size は size や length の指定ができます。文字列の長さや array, collection のサイズに使います。multiple で約数を指定することもできます。- CallSuper- CheckResult- ColorInt- Keep- RequiresPermission↓@CallSuper を指定したメソッドをOverrideしてsuperを呼ばないと怒られます。↓@CheckResult を指定したメソッドを呼び出して戻り値を利用しないと怒られます。↓@ColorInt に color リソースID を渡すと怒られます。@Keep はビルド時に minified されたコードから外さないでほしいことを明示するためのアノテーションです。@RequiresPermission は必要なパーミッションを明示するためのアノテーションです。↓パーミッションが無い状態で、それを必要とするAPIを呼ぶと怒ってくれるようになりました。