java中列舉的一般用法
阿新 • • 發佈:2018-12-18
1.為什麼要使用列舉
列舉是java中特定的一種型別,在實際使用中,它可以作為一種程式規範保證資料引數安全,合理的列舉定義,將大大增強程式碼的可讀性。
2.列舉帶來的好處
user.setStatus(0);
上面的程式碼片段為設定使用者狀態,而狀態0就是我們俗稱的魔鬼數字,後續人員拿到這樣的程式碼時,除了心裡罵娘,程式碼是基本是不敢動的。有經驗的程式猿會將引數提出來定義:
/** 使用者狀態:有效 */ private static final int USER_STATUS_EFFECTIVE = 0; /** 使用者狀態:無效 */ private static final int USER_STATUS_INVALID = 1;
即:
user.setStatus(USER_STATUS_EFFECTIVE );
但往往有時候介面中可能定義使用者狀態作為引數,即對於介面呼叫方來說只知道這是一個Integer型別的引數,即使有註釋,仍然可能傳入任意Integer型別的數字,引數的規範此刻將發揮重要作用,介面中可以將列舉作為引數傳遞。
public enum StatusEnum { STATUS_EFFECTIVE(0, "有效"), STATUS_INVALID(1, "無效"); private Integer status; private String comment; private StatusEnum(Integer status, String comment) { this.status = status; this.comment = comment; } public static String getComment(Integer status) { if (status == null) return null; for (StatusEnum statusEnum : values()) { if (statusEnum.getStatus().intValue() == status.intValue()) { return statusEnum.getComment(); } } return null; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment; } }
3.列舉常用用法
網上說有7種用法,具體我這裡就不一一列舉,只說說非常基礎且常用的用法。
- 列舉元素的呼叫
user.setStatus(StatusEnum.STATUS_EFFECTIVE.getStatus());
- 列舉元素查詢
public static String getComment(Integer status) { if (status == null) return null; for (StatusEnum statusEnum : values()) { if (statusEnum.getStatus().intValue() == status.intValue()) { return statusEnum.getComment(); } } return null; }
外部直接呼叫即可,方法可以自己定義。
String comment = StatusEnum.getComment(status);
4.什麼情況下不適用
並不是所有的引數都適合建立列舉來進行規範,比如專案中常常有資料字典的維護,常常會增加或刪除的字典型別就不適合通過列舉來定義。
5.寫在最後
有人說列舉會增加記憶體,實際上凡事沒有絕對的好處或壞處,只是說適用不適用。全是魔鬼數字程式碼,基本過段時間自己都不知道是什麼意思了,更別指望別人來讀懂你的程式碼。況且簡單常用的編碼風格,也是絕大部分程式猿能夠欣然接受的,不是麼?