什么是枚举
枚举,可以理解为是一个常量的集合。比如星期是一个集合,那么周一,周二,周三等就是这里面的常量。枚举类型是Java 5中新增的特性。
为什么使用枚举
在没有使用枚举之前,我们可以定义一个接口,然后在里面定义常量。如下
interface Day{
int ONE_DAY = 1;
int TWO_DAY = 2;
int THREE_DAY = 3;
}
其实这样看上去也每什么太大影响,但人总是会放错,而枚举可以把这些可能会发生的错误,放大,或者直接就避免了,让我们开发起来出现错误的概率就更小。
并且,它可以类似对象一样,可以添加一些成员,更加方便我们阅读。
SUCCESS(0, "ok", ""),
PARAMS_ERROR(40000, "请求参数错误", ""),
NULL_ERROR(40001, "请求数据为空", ""),
NOT_LOGIN(40100, "未登录", ""),
NO_AUTH(40101, "无权限", ""),
SYSTEM_ERROR(50000, "系统内部异常", "");
如何使用枚举
- 使用enum关键字创建
public enum ErrorCode {
}
2.添加枚举值
public enum ErrorCode {
SUCCESS,PARAMS_ERROR,NULL_ERROR,NOT_LOGIN,NO_AUTH,SYSTEM_ERROR;
}
3.我们还可以给每个枚举值增加属性,让枚举值更加清晰,有含义。
public enum ErrorCode {
SUCCESS(0, "ok", ""),
PARAMS_ERROR(40000, "请求参数错误", ""),
NULL_ERROR(40001, "请求数据为空", ""),
NOT_LOGIN(40100, "未登录", ""),
NO_AUTH(40101, "无权限", ""),
SYSTEM_ERROR(50000, "系统内部异常", "");
private final int code;
/**
* 状态码信息
*/
private final String message;
/**
* 状态码描述(详情)
*/
private final String description;
ErrorCode(int code, String message, String description) {
this.code = code;
this.message = message;
this.description = description;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
public String getDescription() {
return description;
}
}
4.如何进行使用对比
可以在switch中进行对比
ErrorCode code = ErrorCode.PARAMS_ERROR;
switch (code){
case PARAMS_ERROR:
break;
case NO_AUTH:
break;
}
枚举中,还可以添加方法,比如我们可以写一个方法,判断传入的枚举值是否在其中。
public static ErrorCode getEnumByValue(Integer code){
ErrorCode[] values = ErrorCode.values();
for (ErrorCode errorCode: values) {
if (errorCode.code== code) {
return errorCode;
}
}
return null;
}
我们调用的时候可以把枚举的code属性传递进来,就可以知道是否存在其中。如果不在,说明用户传递的数据是错误的,我们要给出响应。
枚举值使用equest还是使用==
都可以,但是用 == 更好
因为
1.== 不会有空指针异常
2.== 在编译期检测类型兼容性,如果出现枚举值不是这个枚举类的,则直接编译错误。如果使用equals则不会提示报错。