Android提供的常用注解以及自定义注解代替枚举

尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/70185731, 本文出自:【gengqiquan的博客】

上篇博客嘀咕了注解的基本知识。这篇和大家唠唠Android提供的一些编译限制注解以及怎么自定义贴合自己项目框架的限制注解

Android支持Java默认的那些注解,同时通过一些依赖库也额外提供了很多注解,了解并熟练使用这些注解能够让你的代码更加严谨,结构更加清晰、架构更易维护

Android support library从19.1版本开始引入了一个新的注解库Support Annotations
support appcompa-v7里面默认包含了这个库,如果你没有使用的话也可以通过添加单独依赖的方式引入
在model的build.gradle中添加如下配置:

dependencies {
    compile ‘com.android.support:support-annotations:25.2.0‘
}

选取的25.2.0版本的,包含了如下几种类型的注解

  • 资源引用限制类:用于限制参数必须为对应的资源类型

    AnimRes AnyRes ArrayRes AttrRes BoolRes ColorRes DimenRes DrawableRes FractionRes IdRes IntegerRes InterpolatorRes LayoutRes MenuRes PluralsRes Px RawRes StringRes StyleableRes StyleRes TransitionRes XmlRes

  • 线程执行限制类:用于限制方法或者类必须在指定的线程执行

    AnyThread BinderThread MainThread UiThread WorkerThread

  • 参数为空性限制类:用于限制参数是否可以为空

    NonNull Nullable

  • 类型范围限制类:用于限制标注值的值范围

    FloatRang IntRange

  • 类型定义类:用于限制定义的注解的取值集合

    IntDef StringDef

  • 其他的功能性注解:

    CallSuper CheckResult ColorInt Dimension Keep Px RequiresApi RequiresPermission RestrictTo Size VisibleForTesting

下面分别举例怎么使用

资源引用限制类

用于当我们期望的输入为所注解对应的类型时,可以加上对应的资源类型注解。这样如果输入了非预期类型的资源ID就编译器就会报错,比如我们在写项目框架时定义了一个设置主布局的抽象方法,需要子类继承该类是实现这个方法,返回一个layout布局ID,一般我们会这么写

    public abstract int getLayoutID();

这样这是限制了返回的数据类型必须为int。如果实现该类的人穿了一个drawable的ID或者一个int数值,也是可以正常编译的。要等到运行到该界面时才会报错。这个时候我们就可以用Support Annotations包提供的注解来标注该方法