枚舉,在java中看似很小的一部分,卻幫我們解決了很多大問題。
爲什麼使用枚舉
我們知道生活中的很多地方都可以使用枚舉,但是很多人在實際編程的時候卻很少使用枚舉類型,是因爲枚舉類型不好用嗎?我認爲不是的,而是他們並不瞭解枚舉。這也是我之前的狀態。
不使用枚舉,對status(狀態)等一些數目有限的對象,我們通常會使用靜態常量的形式來表示,比如下面這樣:
public class Test() {
private static final int CHECK_APPOINTMENT = 1; // 預約中
private static final int CHECK_PENDING_FEEDBACK = 2; // 待反饋
private static final int CHECK_FEEDBACK = 3; // 已反饋
private static final int CHECK_ADMISSIBLE = 4; // 已受理
private static final int CHECK_ALREADY_CHECKED = 5; // 已檢定
private static final int CHECK_RESERVATION_FAILURE = 6; //預約失敗
...
}
這時候,就會這麼使用這些變量:
test.setStauts(Test.CHECK_APPOINTMENT);
好,這樣按規矩來,沒有任何問題,這樣寫的基礎是建立在小組中的每個人都對項目有足夠的瞭解,並且記憶力還不能太差了。但是就怕有些人不安規矩來:
test.setStatus(123);
完了,傻眼了。所以這就體現了枚舉類型比靜態常量更加的安全。
枚舉類型
我們這裏說的枚舉類型是enum
類,和class
,interface
地位相同。
下面介紹幾種簡單的枚舉類型的用法。
1.一般用法
還是上面的例子,我們將它換成是枚舉類型。
public enum ProcessStatusCode {
CHECK_APPOINTMENT("預約中(待預約)", (short)1),
CHECK_PENDING_FEEDBACK("待反饋", (short)2),
CHECK_FEEDBACK("已反饋(待受理)", (short)3),
CHECK_ADMISSIBLE("已受理(待檢定)", (short)4),
CHECK_ALREADY_CHECKED("已檢定(檢定完成)", (short)5),
CHECK_RESERVATION_FAILURE("預約失敗", (short)6);
private Short code; // 代碼
private String name; // 名稱
processStatusCode(String name, Short code) {
this.name = name;
this.code = code;
}
}
首先,先定義枚舉類型,需要說明的是,這裏必須在開頭就定義具體實例,然後纔是定義變量,以及構造函數。
並且我們可以看到,在定義實例的時候,我們調用了構造函數,但是這是一種隱式
的調用。
調用的時候很簡單:
ProcessStatusCode.CHECK_APPOINTMENT
2.switch中使用枚舉
switch
語句使用枚舉類型是再合適不過的了,這可以大大的增加代碼的易讀性。
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED; // 初始化信號燈顏色
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
我們看到,在switch...case
語句使用枚舉類型的時候,case
中的值直接使用枚舉類型的具體實例,這點與上面的有一點不同。
3.枚舉類型中定義函數
與類相同,我們也是可以在枚舉中定義自己的函數的。
public enum Color {
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變量
private String name;
private int index;
// 構造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
public void display() {
System.out.println("這是" + this.name + "色");
}
}
總結
我們說,什麼是規範?規範就是一個團隊寫的代碼像一個人寫的一樣。所以很多時候,雖然我們可以有很多的不同的方法去實現一個需求,但爲什麼我們經常能夠聽到說“這種寫法更好”這樣的話,就是爲了讓我們寫出的代碼更加容易理解,更加易讀。
但是相反的,人們總是難免會有自己的想法,這樣就不利於代碼的一致性。而我們又需要這種一直性,所以就 有了想枚舉類型這樣的限制一些自己想法的東西出現了。
代碼規範的出現,是因爲有了合作的關係。現在的軟件已經越來越多的是由團隊進行編寫,而不是一個人的工作,所以我們應該更加重視代碼規範。