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