美文网首页
用注解提供代码的静态检查

用注解提供代码的静态检查

作者: 喧嚣的风儿 | 来源:发表于2016-09-08 13:22 被阅读32次

    Android 包android.support.annotation包提供了诸如 @IntDef 和 @StringDef 等注解,可以让AS, Lint 提供静态代码检查功能

    用注解型枚举代替普通静态常量和枚举

    原因:

    1. 枚举销毁的内存是普通静态常量的两倍
    2. 普通静态常量不能提供检查

    枚举:

    public class Demo{
       enum Status{
         IDLE,PROCESSING,DONE,CANCELLED
        }
      Status status;
      void setStatus(Status status){
        this.status = status;
      }
    }
    

    普通静态常量:

    public class Demo{
      public static final int IDLE = 0;
      public static final int CANCELLED = 1;
      
      public int status;
      //这里的参数不能提供检查,可以传入任意int
      public setStatus(int status) {
        this.status = status;
      }
    }
    

    枚举型注解:

     public static class Status {
            public static final int IDLE = 0;
            public static final int CANCELLED = 1;
       
        @Retention(RetentionPolicy.SOURCE)
            @IntDef({Status.IDLE, Status.CANCELLED})
            public @interface StatusTypeDef {
            }
       
            public int status;
       
            @StatusTypeDef
            public int getStatus() {
                return status;
            }
    
            public void setStatus(@StatusTypeDef int status) {
                this.status = status;
            }
        }
    

    其他利用注解增强代码的静态检查

    dependencies { compile 'com.android.support:support-annotations:23.3.0'}

    official Android annotations guide

    annotations description
    @Nullable Can be null.
    @NonNull Cannot be null.
    @StringRes References a R.string resource.
    @DrawableRes References a Drawable resource.
    @ColorRes References a Color resource.
    @Interpolator Res References a Interpolator resource.
    @AnyRes References any type of R. resource.
    @UiThread Should only be called on the UI thread

    例子:

    - public View onCreateView(@NonNull Context context);
    - public abstract void setTitle(@StringRes int resId);
    - public void setAlpha(@IntRange(from=0,to=255) int alpha) {}
    - public void setAlpha(@FloatRange(from=0.0, to=1.0) float alpha){}
    

    相关文章

      网友评论

          本文标题:用注解提供代码的静态检查

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