Java列舉使用技巧

2021-08-14 09:35:33 字數 1454 閱讀 2320

列舉是jdk 1.5中引入的新特性。對應的關鍵字為enum。

其實列舉是乙個特殊的類,這個類內部儲存的是這個類的所有物件例項。

列舉一般適合用於有限個數的引數定義。例如已知個數的型別定義、各種狀態的定義等。其實就是固定有限數量的全域性變數。以支付業務作為例子,定義支付單的狀態的時候,支付狀態其實有固定的幾個。這個時候就可以選擇使用列舉了。

介紹完適合的業務場景之後,我會基於場景的例子編寫的乙個例項。

/**

* 支付狀態列舉,支付狀態碼(支付狀態的中文名稱)

*@author rjh

*@date 2023年1月6日

*/public

enum paystatus

/*** 獲取支付狀態物件對應的中文名稱

*@return

*/public string getstatusname()

}

列舉中每個成員實際上就是呼叫了構造方法之後產生的物件。例項中只是簡單的做個示範,實際上可以更加複雜,例如加上狀態數字碼。

在數學和電腦科學理論中,乙個集的列舉是列出某些有窮序列集的所有成員的程式,或者是一種特定型別物件的計數。

既然是有限集,那麼構造方法就不會讓其他類去呼叫。

這裡要補充一點:乙個列舉中允許有多個構造方法。

既然列舉是jdk 1.5中引入的新特性,那麼在這個版本以前是怎麼處理的呢?這時候一般都是選擇使用介面來儲存有限的支付狀態,例項**如下:

/**

* jdk 1.5以前的支付狀態的處理方案

*@author rjh

*@date 2023年1月6日 下午6:58:12

*/public

inte***ce

paystatus

但是有時候我們會遇到需要判斷乙個支付狀態是否是有效狀態的情況(是否包含在列舉中),有人可能會選擇使用列舉提供的valueof()方法,但是這個方法如果遇到以下情況會丟擲執行時異常:

//傳入乙個不存在的物件名

paystatus.valueof("a");

雖然可以使用try…catch去處理這種情況,但是可以使用以下方法處理:

/**

* 判斷支付狀態碼是否有效

*@param status 支付狀態碼

*@return

*/public

static

boolean

isvalid(string status)

}return flag;

}

可以把上面的**新增到支付狀態的列舉類中,由列舉類來管理和維護。

其實在列舉例項優化之前,新舊兩種方案的區別不大。但是在優化之後,可以把一些處理的方法寫入到列舉類中,使得我們更好的使用列舉。

java 列舉使用總結

特別注意使用列舉與string做判斷 color.red.equals 紅色 這個是列舉與字串直接比較,結果 false color.red.name.equals 紅色 這個是列舉屬性值與字串直接比較,結果 true 向列舉中新增新方法 1 public enum color 11 普通方法 12...

C 語言使用技巧 列舉

例如有public enum animalenum enum to string animalenum.dog.tostring dog enum to int int i int animalenum.dog 遍歷列舉 反射 enum.getnames 字串格式 type type typeof ...

Java反射使用技巧

1.通過setaccessible關閉安全檢查,關閉的目的不是因為訪問的field method是私有的,而且因為關閉後訪問公有方法也不會再有安全檢查.someobject someobject new someobject class cls someobject.class method met...