Enum自定义属性

作者: 奔跑吧李博 | 来源:发表于2018-10-08 23:24 被阅读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状态码获取当前状态,直接获取了对应当前需要提示的内容。

    相关文章

      网友评论

        本文标题:Enum自定义属性

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