1. 程式人生 > >java中列舉的一般用法

java中列舉的一般用法

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.寫在最後

有人說列舉會增加記憶體,實際上凡事沒有絕對的好處或壞處,只是說適用不適用。全是魔鬼數字程式碼,基本過段時間自己都不知道是什麼意思了,更別指望別人來讀懂你的程式碼。況且簡單常用的編碼風格,也是絕大部分程式猿能夠欣然接受的,不是麼?