java 枚举常量_java中的枚举类和常量类区别在哪儿?
假如有一筆業(yè)務(wù)需要審核,審核狀態(tài)分:未審核,審核中,審核通過,審核不通過。我們?cè)诔绦蚶锸欠窨梢灾苯舆@么寫:
if(state==1){//1代表未操作
//操作
}else{
//......
}
將狀態(tài)標(biāo)識(shí)直接寫在代碼里面(硬編碼),只圖一時(shí)方便,卻是后患無窮,如果有一天你需要修改狀態(tài)標(biāo)識(shí),用0代表未審核而不是1,你不得不將所有與該標(biāo)識(shí)相關(guān)的代碼都找出來一個(gè)個(gè)改,另外,在編碼過程中,標(biāo)識(shí)輸入錯(cuò)誤的概率是比較高的,一不小心把0輸入成了10,雖然不會(huì)提示任何編譯錯(cuò)誤,但運(yùn)行結(jié)果將是出乎人的意料的。
于是我們很快想到可以用常量代替:
publicstaticfinalintUNAUDIT = 0;
相關(guān)判斷代碼則是:
if(state==CONSTANT.UNAUDIT){
//操作
}else{
//......
}
這段代碼比硬編碼更加健壯容易維護(hù),但是仍然有不足之處。
1、UNAUDIT是編譯期常量,如果其值被改變,那么使用方需要重新編譯。
2、沒有簡便的方法獲取標(biāo)識(shí)代表的字符串描述。
于是我們用枚舉類來代替常量。
publicenum AuditState {
UNAUDIT(1),
AUDITING(2),
AUDIT_SUCCESS(3),
AUDIT_FAIL(4);
privatefinalint statenum;
AuditState(int statenum){
this.statenum = statenum;
}
publicint getStatenum() {
return statenum;
}
}
調(diào)用如下:
if (state == AuditState.UNAUDIT.getStatenum()) {
//AuditState.UNAUDIT.toString()獲取字符串描述
System.out.println(AuditState.UNAUDIT.toString() + "標(biāo)識(shí)是 "
+ AuditState.UNAUDIT.getStatenum());
} else {
//......
}
枚舉類還有更加強(qiáng)大的功能,如添加字段,方法,還可以對(duì)他進(jìn)行遍歷訪問
歡迎關(guān)注公眾號(hào) drjava
總結(jié)
以上是生活随笔為你收集整理的java 枚举常量_java中的枚举类和常量类区别在哪儿?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sequence mysql jpa_J
- 下一篇: java excel jxls_java