1. 程式人生 > >java 列舉 迴圈遍歷以及一些簡單常見的使用

java 列舉 迴圈遍歷以及一些簡單常見的使用

什麼時候想用列舉型別:

有時候,在設計一個java model物件的時候,你需要一些具體的常量字串之類的東西,這個東西又沒必要跟整個專案的全域性常量放在一起,就放在model的java檔案裡面是最合適的,那麼,你可以有兩種選擇:

1,在java model檔案裡面,定義public final static XXXX = "" ;

           這種就是全域性靜態變數,通過類名就可以直接訪問。

2,還是在java model 檔案裡面,定義個列舉型別 public enum XXXX{a,b,c,d,e,f};

什麼時候,如何使用:

當在和前臺傳過來的資料或者在邏輯操作的程式碼裡面需要去用到這個常量值去做比較的時候,就是使用列舉型別的時候。

一般形式是: 類名.列舉型別名.單個列舉型別        

用上面的例子(假設在一個叫A的model java檔案裡面),

則為A.XXXX.a.toString();  

就可以這麼使用了。

為什麼要這麼設計常量:

這裡有個程式碼的書寫原則,這東西一般是沒人,而且書裡面也是沒人跟你說的,都是程式碼看多了,或者,在你犯錯誤的時候才知道的問題。

就是在自己的程式碼裡面,要是想使程式碼很規範,不被吊打,

那麼寫出來的邏輯程式碼裡面是不應該出現常量字串和常量數字之類的東西

例如程式碼裡面出現數字:100,8,

或者其他的數字,

字串如:只要是在邏輯程式碼裡面帶引號的。

這些程式碼,你寫出來雖然在功能上是沒有問題的,但是,這些都是隱藏的炸彈。

好的程式碼,是不會出現這個問題的。這些東西都應該被定義成一個常量,然後再在其他地方使用。

類似c語言裡面的巨集定義的感覺。

不然在很久之後,忽然有些地方的值換了,只需要修改一處地方,整個專案都不用擔心會出問題,

但是,如果你沒有這麼幹,那麼,沒人知道你在邏輯程式碼裡面還有這樣的常量存在。

那麼程式碼就會出現美妙的後果。

然後就炸了。

怎麼迴圈一個列舉型別。

列舉有一個方法,values(),

使用形式如: int length = XXXX.values().length  

返回的是一個型別與列舉型別一致的陣列。

然後就可以迴圈這個陣列。

就是迴圈列舉型別了。

public enum EnumTest {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}
//迴圈輸出 值
for (EnumTest e : EnumTest.values()) {
	System.out.println(e.toString());
}


.ordinal()方法。

這個方法就是從列舉型別的第一個列舉開始,依次從零開始往上遞增。

上面的例子中a,b,c,d,e,f,依次對應 為數字 ,0,1,2,3,4,5

形式:A.XXXX.a.ordinal();

 這麼個方式呼叫。

建立列舉型別要使用 enum 關鍵字,
隱含了所建立的型別都是 
java.lang.Enum 
類的子類(java.lang.Enum 是一個抽象類)
其中的方法和屬性如下圖:


enum 物件的常用方法介紹


int compareTo(E o) 
比較此列舉與指定物件的順序。

Class<E> getDeclaringClass()
返回與此列舉常量的列舉型別相對應的 Class 物件。

String name() 

返回此列舉常量的名稱,在其列舉宣告中對其進行宣告。

int ordinal() 
返回列舉常量的序數(它在列舉宣告中的位置,其中初始常量序數為零)。

String toString()
返回列舉常量的名稱,它包含在宣告中。

static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
返回帶指定名稱的指定列舉型別的列舉常量。