Java枚举类型的使用
在Jdk1.4之前,还没有出现枚举类型,定义常量一般采用如下方式:
publicinterface JSONStatus {
// 1. 成功,正确返回正确信息
// 2. 用户还未登录
// 3. 当前对象不存在
// 4. 数据重复
// 5. 不支持当前请求
// 6. 用户没有权限修改
// 7. 用户冻结
// 8. 请求失败
// 9. 匿名用户上传数超过限额
// 10. 上传数据非法
publicstaticintJSON_STATUS_SUCCEED = 1;
publicstaticintJSON_STATUS_NOLOGIN = 2;
publicstaticintJSON_STATUS_NOTEXISTOBJECT = 3;
publicstaticintJSON_STATUS_DUPLICATE = 4;
publicstaticintJSON_STATUS_REQUESTREJECT = 5;
publicstaticintJSON_STATUS_NOHAVEPERM = 6;
publicstaticintJSON_STATUS_FREEZE = 7;
publicstaticintJSON_STATUS_FAIL = 8;
publicstaticintJSON_STATUS_OVER = 9;
publicstaticintJSON_STATUS_FORBIDDEN = 10;
publicstaticintJSON_STATUS_PASSWD_NOTEMPTY = 11;
}
这些常量都是java的int类型的常量,如果加入一个新的值,需要重新检测是否越界,效率上不高;如果出现了无效值,还会抛出参数异常IllegalArgumentException。
此外,还存在一个严重的问题,如果修改某个常量的值JSON_STATUS_FORBIDDEN=20,而有另外一个项目使用了这个常量却没有重新编译,它取到的值还会是10。这种潜在的错误很难被发现。
于是有人想到了如下的定义方法:
public class WeekDay {
public static final WeekDay MONDAY = new WeekDay(1);
public static final WeekDay TUESDAY = new WeekDay(2);
public static final WeekDay WENSDAY = new WeekDay(3);
public static final WeekDay THURSDAY = new WeekDay(4);
public static final WeekDay FRIDAY = new WeekDay(5);
public int getValue(){
return value;
}
private int value;
private WeekDay(int i){
this.value = i;
}
//other methods...
}
自从jdk5以后出现了java枚举类型,真是千呼万唤始出来,大大方便了常量的定义,且高效,举例如下:
publicenum StatusEnum {
// 1. 成功,正确返回正确信息
// 2. 用户还未登录
// 3. 当前对象不存在
// 4. 数据重复
// 5. 不支持当前请求
// 6. 用户没有权限修改
// 7. 用户冻结
// 8. 请求失败
// 9. 匿名用户上传数超过限额
// 10. 上传数据非法
JSON_STATUS_SUCCEED(1),
JSON_STATUS_NOLOGIN(2),
JSON_STATUS_NOTEXISTOBJECT(3),
JSON_STATUS_DUPLICATE(4),
JSON_STATUS_REQUESTREJECT(5),
JSON_STATUS_NOHAVEPERM(6),
JSON_STATUS_FREEZE(7),
JSON_STATUS_FAIL(8),
JSON_STATUS_OVER(9),
JSON_STATUS_FORBIDDEN(10),
JSON_STATUS_PASSWD_NOTEMPTY(11);
//自定义属性
privatefinalintvalue;
//自定义构造方法
StatusEnum(int value) {
this.value = value;
}
/**
* <p>Description:得到对应的value</p>
* @return
* @date 2012-7-17 下午3:39:02
*/
publicint getValue() {
returnvalue;
}
publicstaticvoid main(String[] args) {
System.out.println(StatusEnum.JSON_STATUS_FORBIDDEN);
}
}