リソース ID を表す int 変数に付けるアノテーション
Android の各種リソースの ID は int 型で管理されています。 この値を変数に格納したり、メソッドのパラメータとして受け取るように実装した場合、不正な int 値が渡されて実行時に落ちてしまうリスクがあります。
このようなことをできるだけ防ぐため、Android Support ライブラリには下記のようなアノテーションが用意されており、これらを付加した int 型変数には、指定した種類のリソースの ID しか格納できなくなります(AndroidStudio で警告が表示されるようになります)。
| アノテーション | リソース ID の種類 |
|---|---|
| @AnimatorRes | R.animator.xxx で参照するリソース ID |
| @AnimRes | R.anim.xxx で参照するリソース ID |
| @AnyRes | いずれかの種類のリソースの ID(他の具体的なアノテーションを使用することを推奨) |
| @ArrayRes | R.array.xxx で参照するリソース ID |
| @AttrRes | R.attr.xxx で参照するリソース ID |
| @ColorRes | R.color.xxx で参照するリソース ID |
| @DimenRes | R.dimen.xxx で参照するリソース ID |
| @DrawableRes | R.drawable.xxx で参照するリソース ID |
| @FontRes | R.font.xxx で参照するリソース ID |
| @IdRes | R.id.xxx で参照するリソース ID |
| @IntegerRes | R.interger.xxx で参照するリソース ID |
| @InterpolatorRes | R.interpolator.xxx で参照するリソース ID |
| @LayoutRes | R.layout.xxx で参照するリソース ID |
| @NavigationRes | R.navigation.xxx で参照するリソース ID |
| @RawRes | R.raw.xxx で参照するリソース ID |
| @StringRes | R.string.xxx で参照するリソース ID |
| @StyleableRes | R.styleable.xxx で参照するリソース ID |
| @StyleRes | R.style.xxx で参照するリソース ID |
| @TransitionRes | R.transition.xxx で参照するリソース ID |
int 変数用アノテーションの使用例
上記のようなアノテーションは Annotation Support Library で提供されているため、build.gradle に下記のような依存を追加しておく必要があります(参考: 本家ドキュメント)。
com.android.support:support-annotations:24.2.0
下記は、color 値のリソース ID のみを格納できる int 型フィールドを定義する例です。
@ColorRes
private int mainColorResId = R.color.white;
メソッドのパラメータにもアノテーションを付けることができます。 下記のように指定された int 型パラメータには、文字列リソースを示す ID しか渡せなくなります。
public class ResourceResolver {
...
public String getString(@StringRes int resId) {
return context.getString(resId);
}
}
android.support.annotation パッケージ には他にもいろいろなアノテーションが定義されているので、ざっと見ておくとよいでしょう。
例えば、int 型用のアノテーションとしては、上記のようなリソース ID 関連のものだけではなく、AARRGGBB 形式のカラー値であることを示すアノテーションが定義されていたりします。
- @ColorInt:
AARRGGBB形式の int 値