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);
}
}