我们定义多个常量可以进行匹配判断,但是会有多个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状态码获取当前状态,直接获取了对应当前需要提示的内容。
网友评论