Android Support Annotation

来源:互联网 发布:政府 阿里云 安全 编辑:程序博客网 时间:2024/05/21 15:26

 有时在项目开发中会遇到这种这种@NonNull注解,你可能会想,这是干嘛的,怎么使用它?
这里写图片描述

 其实这个是Android support library从19.1版本开始引入了一个新的注解库,它包含很多有用的元注解,Support library自己本身也用到了这些注解,我们也可以用这些注解来校验我们开发的代码潜在的问题,比如null判断

 在Android studio中,可以通过gradle来引入support library的Annotation库
 这里写图片描述
 或者你原来已经有引入appcompat或v4-support库,你也可以直接使用,因为这些库本来已经依赖于Annotation库了
 这里写图片描述

打开annotation库的可以发现
这里写图片描述
其实包含了三种类型的注解提供我们使用:

1. Nullness注解
使用@NonNull注解修饰的参数不能为null,下面代码中showAlertDialog方法可以看到第四个参数这里写图片描述 使用了@NonNull注解修饰,说明该参数要求应该是非null的String,我们尝试把它用null传入
这里写图片描述
可以看到,当标有@NonNull注解修饰的参数传入null时会有提示我们那参数是为非null的,而showAlertDialog方法中前几个参数因为使用了@Nullable注解修饰,所以在传入null时没有检查是否为null。

2. 资源类型注解
  资源注解能够有效的帮我们提示使用错误的资源整型值,例如下面的setWidgetState方法使用了@IdRes注解,当传入的参数不是id类型时会给予我们错误提示
  这里写图片描述

此外,annotation库中资源注解如下:

  • AnimatorRes :指出一个integer的参数,成员变量,或方法返回值是一个animator资源的引用
  • AnimRes:指出一个integer的参数,成员变量,或方法返回值是一个anim资源的引用
  • AnyRes:指出一个integer的参数,成员变量,或方法返回值是一个任意资源类型的引用
  • ArrayRes:指出一个integer的参数,成员变量,或方法返回值是一个array资源类型的引用
  • AttrRes:指出一个integer的参数,成员变量,或方法返回值是一个attr资源的引用
  • BoolRes:指出一个integer的参数,成员变量,或方法返回值是一个boolean资源的引用
  • ColorRes:指出一个integer的参数,成员变量,或方法返回值是一个color资源的引用
  • DimenRes:指出一个integer的参数,成员变量,或方法返回值是一个dimen资源的引用
  • DrawableRes:指出一个integer的参数,成员变量,或方法返回值是一个drawable资源的引用(包括@mipmap)
  • FractionRes:指出一个integer的参数,成员变量,或方法返回值是一个fraction资源的引用
  • IdRes:指出一个integer的参数,成员变量,或方法返回值是一个id资源的引用
  • IntegerRes:指出一个integer的参数,成员变量,或方法返回值是一个integer资源的引用
  • InterpolatorRes:指出一个integer的参数,成员变量,或方法返回值是一个interpolator资源的引用
  • LayoutRes:指出一个integer的参数,成员变量,或方法返回值是一个layout资源的引用
  • MenuRes:指出一个integer的参数,成员变量,或方法返回值是一个menu资源的引用
  • PluralsRes:指出一个integer的参数,成员变量,或方法返回值是一个plurals资源的引用
  • RawRes:指出一个integer的参数,成员变量,或方法返回值是一个raw资源的引用
  • StringRes:指出一个integer的参数,成员变量,或方法返回值是一个string资源的引用
  • StyleableRes:指出一个integer的参数,成员变量,或方法返回值是一个styleable资源的引用
  • StyleRes:指出一个integer的参数,成员变量,或方法返回值是一个style资源的引用
  • TransitionRes:指出一个integer的参数,成员变量,或方法返回值是一个transition资源的引用
  • XmlRes:指出一个integer的参数,成员变量,或方法返回值是一个xml资源的引用
      
    3. 颜色注解
      当定义了一个方法用来设置颜色,但是因为表示颜色用的是int类型,这样就会导致使用的人无法区分是要传一个表示颜色的资源还是颜色值,所以可以使用@ColorInt 来指明一个被注解的元素是一个int颜色值,例如:
      这里写图片描述
      这里写图片描述

4. 取值范围的注解
  Annotation库中用还给出了几个注解用来表示被注解元素的给定范围,主要有:

  • IntRange:指出一个被注解的元素应该是一个给定范围内的int值或long值
  • IntDef:指出一个int类型的元素,它表示的是一个逻辑上的类型,并且它的值必须是被明确声明的常量之一,可以使用这种方式使int类型代替enum类型
  • StringDef:指出一个String类型的元素,它表示的是一个逻辑上的类型,并且它的值必须是被明确声明的常量之一
  • FloatRange:指出一个被注解的元素应该是一个给定范围内的float值或double值
      这里写图片描述

5. 线程注解

  • MainThread:指出被注解的方法应该只在主线程中被调用
  • UiThread:指出被注解的方法应该只在UI线程中被调用
  • WorkerThread:指出被注解的方法应该只在工作线程中被调用
  • BinderThread:指出被注解的方法应该只在binder线程中被调用
      这里写图片描述

6. 其他注解

  • CallSuper:指出一个方法如果被重写了,它必须也被调用。比如Activity的生命周期方法onCreate( ),Fragment生命周期方法onCreateView()等
  • CheckResult:指出一个方法返回的结果通常是否为一个忽略的错误
  • Keep:指出一个方法在被混淆的时候应该被保留
  • Size:表示一个被注解的元素应该有一个给定的大小或长度
  • VisibleForTesting:可注解一个类,方法,或变量,表示有更宽松的可见性,这样它能够有更宽泛的可见性,使代码可以被测试

0 0
原创粉丝点击