枚舉,在java中看似很小的一部分,卻幫咱們解決了不少大問題。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);
好,這樣按規矩來,沒有任何問題,這樣寫的基礎是創建在小組中的每一個人都對項目有足夠的瞭解,而且記憶力還不能太差了。可是就怕有些人不安規矩來:this
test.setStatus(123);
完了,傻眼了。因此這就體現了枚舉類型比靜態常量更加的安全。.net
咱們這裏說的枚舉類型是enum
類,和class
,interface
地位相同。代碼規範
下面介紹幾種簡單的枚舉類型的用法。code
仍是上面的例子,咱們將它換成是枚舉類型。對象
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; } }
首先,先定義枚舉類型,須要說明的是,這裏必須在開頭就定義具體實例,而後纔是定義變量,以及構造函數。blog
而且咱們能夠看到,在定義實例的時候,咱們調用了構造函數,可是這是一種隱式
的調用。
調用的時候很簡單:
ProcessStatusCode.CHECK_APPOINTMENT
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
中的值直接使用枚舉類型的具體實例,這點與上面的有一點不一樣。
與類相同,咱們也是能夠在枚舉中定義本身的函數的。
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 + "色"); } }
咱們說,什麼是規範?規範就是一個團隊寫的代碼像一我的寫的同樣。因此不少時候,雖然咱們能夠有不少的不一樣的方法去實現一個需求,但爲何咱們常常可以聽到說「這種寫法更好」這樣的話,就是爲了讓咱們寫出的代碼更加容易理解,更加易讀。
可是相反的,人們老是不免會有本身的想法,這樣就不利於代碼的一致性。而咱們又須要這種一直性,因此就 有了想枚舉類型這樣的限制一些本身想法的東西出現了。
代碼規範的出現,是由於有了合做的關係。如今的軟件已經愈來愈多的是由團隊進行編寫,而不是一我的的工做,因此咱們應該更加劇視代碼規範。