Android使用注解来限制变量类型

321 阅读1分钟

在写代码的时候,需要处理很多的int值来做各种判断,有时候用枚举很简单。但是当int值存在复数或者不连贯数据的时候,枚举就不是很方便。

不过可以通过注解的方式限制int的类型,达到类似枚举的提示。方便代码阅读。

    /**
     * 未知的布局
     */
    public static final int VIEW_STATE_UNKNOWN = -1;
    /**
     * 内容的布局
     */
    public static final int VIEW_STATE_CONTENT = 0;
    /**
     * 获取错误的布局
     */
    public static final int VIEW_STATE_ERROR = 1;
    /**
     * 空数据的布局
     */
    public static final int VIEW_STATE_EMPTY = 2;
    /**
     * 加载的布局
     */
    public static final int VIEW_STATE_LOADING = 3;
    /**
     * 网络状态错误的布局
     */
    public static final int VIEW_STATE_NET_ERROR = 4;
    /**
     * 需要登录的布局
     */
    public static final int VIEW_STATE_NEED_LOGIN = 5;
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({VIEW_STATE_UNKNOWN, VIEW_STATE_CONTENT, VIEW_STATE_ERROR, VIEW_STATE_EMPTY, VIEW_STATE_LOADING, VIEW_STATE_NET_ERROR, VIEW_STATE_NEED_LOGIN})
    public @interface ViewState {
    }
    //规范变量的类型
    @ViewState
    private int mViewState = VIEW_STATE_UNKNOWN;
    //规范方法的参数类型
    /**
     * Sets the current {@link com.yixun.view.MultiStateView.ViewState}
     *
     * @param state The {@link com.yixun.view.MultiStateView.ViewState} to set {@link MultiStateView} to
     */
    public void setViewState(@ViewState int state) {
        if (state != mViewState) {
            int previous = mViewState;
            mViewState = state;
            setView(previous);
            if (mListener != null) mListener.onStateChanged(mViewState);
        }
    }