Java編程瑣事(12)-Java枚舉類型的使用

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

    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章