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;

}

这些常量都是javaint类型的常量,如果加入一个新的值,需要重新检测是否越界,效率上不高;如果出现了无效值,还会抛出参数异常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);

}

}

更多相关文章

  1. 【Effective Java】条30:使用枚举代替int常量
  2. JSP+JavaBean实现用户登录功能

随机推荐

  1. 再谈文件读写:判断文件的几种方法及其优劣
  2. 从一篇Blog看两个并发编程错误
  3. 每日前端夜话(0x04):2018年JavaScript状态
  4. LeetCode #27 移除元素
  5. 以B站C语言视频为基础的课后总结(一)
  6. LeetCode #26 删除排序数组中的重复项
  7. 排序算法 #5 归并排序
  8. 来自Kenneth Reitz大神的建议:避免不必要
  9. 满满的一篇,全是复杂度分析核心知识点
  10. LeetCode #80 删除排序数组中的重复项II