美文网首页Android开发知识小集
Android 常用注解介绍及注解声明

Android 常用注解介绍及注解声明

作者: Thread_921 | 来源:发表于2019-02-22 11:29 被阅读119次

    一、常用注解

    开发中经常使用到注解,例如Android自带的 IntDef、StringDef、NonNull、Nullable、ColorRes(其他的XxxRes)、IntRange、Size、等,这只是一些有代表性的注解,还有一些第三方的注解比如Gson的SerializedName设置多个别名、Butterknife的BindView等等。大大提升了开发的效率以及可读性。

    1. XxxDef 类型定义注解,其中包括IntDefStringDefLongDef。使用这种方式注解可以代替枚举来实现限制类型&声明常量

    @IntDef({ConversationType.NONE,ConversationType.PRIVATE_B2C,ConversationType.PRIVATE_C2C, ConversationType.GROUP})
        //注解的作用目标 在方法参数、字段、方法中出现
        @Target({
                ElementType.PARAMETER,
                ElementType.FIELD,
                ElementType.METHOD,
        })
        //注解仅存在于源码中,在class字节码文件中不包含
        @Retention(RetentionPolicy.SOURCE)
        //声明注解
        public @interface ConversationType {
            int NONE = 0;
            int PRIVATE_B2C = 1;
            int PRIVATE_C2C = 2;
            int GROUP = 3;
        }
    

    2. NonNull标记参数或者返回不可以为空,Nullable标记参数或者返回值可以为空

    3. XxxRes 资源类型注解(指定为对应的类型)

    @AnimatorRes ----android.R.animator
    @AnimRes-----android.R.anim
    @ArrayRes----android.R.array
    @AttrRes-----android.R.attr
    @BoolRes----bool类型
    @ColorRes-----android.R.color
    @DrawableRes ----android.R.drawable
    @IdRes----android.R.id
    @IntegerRes----android.R.integer
    @LayoutRes----android.R.layout
    @MenuRes----android.R.menu
    @RawRes----android.R.raw
    @StringRes---android.R.string
    @StyleableRes----android.R.styleable
    @XmlRes---android.R.xml
    

    4. 线程注解

    @UiThread
    @MainThread
    @WorkerThread (后台线程)
    @BinderThread(binder线程)
    

    5. 值范围注解(防止传入错误参数,有三种注解)

    • @Size 类似数组、集合、字符串
      @Size(min = 1)//可以表示集合不可为空
      @Size(max = 23)//可以表示最大字符个数为23
      @Size(2)可以表示数组元素个数为2个
      @Size(multiple = 2)//可以表示数组大小是2的倍数
      
    • @IntRange 参数类型为int或者long
      public void setValue(@IntRange(from=0,to= 10) int value){}
      
    • @FloatRange 参数为float或者double

    6. @Keep 用来标记在[Proguard]混淆过程中不需要混淆的类和方法

    7. 权限注解(为了在编译期发现权限的缺失 ,可以使用@RequiresPermission注解)

    //1.如果调用函数需要声明一个权限
    @RequiresPermission(Manifest.permission.SET_WALLPAPER)
    //2.如果调用函数需要声明集合中至少一个权限
    @RequiresPermission(anyOf = { Manifest.permission.ACCESS_COARSE_LOCATION,}Manifest.permission.ACCESS_FINE_LOCATION)
    //3.如果调用函数需要同时声明多个权限
    @RequiresPermission(allOf = {Manifest.permission.ACCESS_COARSE_LOCATION,}Manifest.permission.ACCESS_FINE_LOCATION)
    

    常用注解到此就介绍完毕,接下来我们看看如何声明自己的注解

    二、声明注解

    首先必须介绍一下Java中的元注解,元注解是什么呢?就是注解的注解!包括@Retention、@Target、@Document、@Inherite四种。

    1. @Retention:定义注解的保留策略
    //注解仅存在于源码中,在class字节码文件中不包含
    @Retention(RetentionPolicy.SOURCE)
    // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
    @Retention(RetentionPolicy.CLASS)
    // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
    @Retention(RetentionPolicy.RUNTIME)
    
    1. @Target:定义注解的作用目标
    @Target(ElementType.TYPE)   //接口、类、枚举、注解
    @Target(ElementType.FIELD) //字段、枚举的常量
    @Target(ElementType.METHOD) //方法
    @Target(ElementType.PARAMETER) //方法参数
    @Target(ElementType.CONSTRUCTOR)  //构造函数
    @Target(ElementType.LOCAL_VARIABLE)//局部变量
    @Target(ElementType.ANNOTATION_TYPE)//注解
    @Target(ElementType.PACKAGE) ///包
    
    1. @Document:说明该注解将被包含在javadoc
    2. @Inherited:说明子类可以继承父类中的该注解

    如有误点,多多指教 喜欢呦~

    相关文章

      网友评论

        本文标题:Android 常用注解介绍及注解声明

        本文链接:https://www.haomeiwen.com/subject/agbsyqtx.html