Android技术知识Android开发Android开发

Enum自定义属性

2018-10-08  本文已影响12人  奔跑吧李博

我们定义多个常量可以进行匹配判断,但是会有多个public static final 声明。当
把同一类型的常量组合起来表示,就成了枚举的表示方法。

Enum的基本方法
构造方法
    protected Enum(String name, int ordinal) {
        this.name = name;
        this.ordinal = ordinal;
    }
比较此枚举与指定对象的顺序
    public final int compareTo(E o) {
        Enum<?> other = (Enum<?>)o;
        Enum<E> self = this;
        if (self.getClass() != other.getClass() && // optimization
            self.getDeclaringClass() != other.getDeclaringClass())
            throw new ClassCastException();
        return self.ordinal - other.ordinal;
    }
获取枚举名
    public final String name() {
        return name;
    }
返回该枚举对象在枚举中的位置
   public final int ordinal() {
        return ordinal;
    }

枚举自定义属性使用示例

在请求接口中,接口通常会带有各个状态码以及该种结果的原因,需要得到状态码后将对应的原因表示出来。这种情况可以用枚举自定义属性来完成该功能。

请求接口后,后台通常会返回如下的数据格式,App端开发人员就需要根据code状态来统一处理结果。比如token失效,用户权限不足,业务请求失败等。

{
code:
data:""
}

业务状态:这状态码和状态原因都是固定的,且一一对应的,那么就可以用枚举自定义属性关联起来。
"0000","请求成功"

"2001","用户未登录"

"2002","用户权限不足"

"5000","业务请求失败"

自定义Enum类StatusCodeEnum完整代码:

public enum StatusCodeEnum {

    RESULT_OK("0000","请求成功"),

    RESULT_UNLOGIN("2001","用户未登录"),

    RESULT_NOAUTHORITY("2002","用户权限不足"),

    RESULT_ERROR("5000","业务请求失败");

    private String tipMsg;
    private String statusCode;

    StatusCodeEnum(String statusCode,String tipMsg){
        this.tipMsg = tipMsg;
        this.statusCode = statusCode;
    }

    public String getTipMsg() {
        return tipMsg;
    }

    public void setTipMsg(String tipMsg) {
        this.tipMsg = tipMsg;
    }

    public String getStatusCode() {
        return statusCode;
    }

    public void setStatusCode(String statusCode) {
        this.statusCode = statusCode;
    }

    public static StatusCodeEnum getByCode(String code) {
        StatusCodeEnum[] statusCodes = StatusCodeEnum.values();
        for (StatusCodeEnum c:statusCodes) {
            if (c.getStatusCode().equals(code)) {
                return c;
            }
        }
        return StatusCodeEnum.RESULT_ERROR;
    }

}

通过 getByCode(String code)方法,传入状态码,遍历匹配得到msg。

获取msg方法:

    private String tipMsg(String code){
        return StatusCodeEnum.getByCode(code).getTipMsg();
    }

使用这种写法,在统一处理后台接口返回数据时,根据code状态码获取当前状态,直接获取了对应当前需要提示的内容。

上一篇下一篇

猜你喜欢

热点阅读