Java優(yōu)化if-else代碼的實(shí)戰(zhàn)記錄
前言
開(kāi)發(fā)系統(tǒng)一些狀態(tài),比如訂單狀態(tài):數(shù)據(jù)庫(kù)存儲(chǔ)是數(shù)字或字母,但是需要顯示中文或英文,一般用到if-else代碼判斷,但這種判斷可讀性比較差,也會(huì)影響后期維護(hù),也比較容易出現(xiàn)bug。比如:
假設(shè)狀態(tài)對(duì)應(yīng)關(guān)系:1:agree 2:refuse 3:finish
int status;
String statusStr = null;
if (status == 1) {
status = "agree";
} else if (status == 2) {
status = "refuse";
}else if(status == 3) {
status = “finish”;
}
方案一: 數(shù)組
這種僅限通過(guò)數(shù)字獲取到字母或者中文。
首先設(shè)置數(shù)組
String[] statusArray = {"","agree","refuse","finish"};
通過(guò)數(shù)組的位置獲取數(shù)組的值
int status; String statusStr = statusArray[status];
- 優(yōu)點(diǎn): 占用內(nèi)存少
- 缺點(diǎn): 狀態(tài)值只能是數(shù)字,而且還需要考慮數(shù)組越界情況
方案二:HashMap
創(chuàng)建和添加map:
private static final Map<Integer,String> map = new HashMap<>();
static {
map.put(1,"agree");
map.put(2,"refuse");
map.put(3,"finish");
}
這種有兩種求解方式,通過(guò) key 獲取 value 以及通過(guò) value 獲取 key,
由 key 獲取 value
直接使用 get 方法即可。這里的key相對(duì)于數(shù)組解法,不限制 key 的類型。
int status; map.get(status);
由 value 獲取 key
使用map遍歷:
int status;
for(Map.Entry<Integer, String> vo : map.entrySet()){
if (vo.getValue().equals(result)) {
status = vo.getKey();
break;
}
}
- 優(yōu)點(diǎn):狀態(tài)值不限制數(shù)字
- 缺點(diǎn):占用空間大
解決方案三:枚舉
先定義一個(gè)枚舉類
public enum TestEum {
agree(1,"agree"),
refuse(2,"refuse");
private int code;
private String capation;
TestEum(int code,String capation){
this.code = code;
this.capation = capation;
}
public int getCode() {
return code;
}
public String getCapation() {
return capation;
}
String of(int code){
for (TestEum testEum : TestEum.values()) {
if (testEum.getCode() == code) {
return testEum.getCapation();
}
}
return null;
}
}
有了枚舉以后,if-else 代碼塊可以優(yōu)化成一行代碼
String statusStr = TestEum.of(status);
總結(jié)
- 如果通過(guò)數(shù)字獲取描述,使用數(shù)組即可。
- 如果通過(guò)描述獲取數(shù)字,使用枚舉和HashMap都可以。
到此這篇關(guān)于Java優(yōu)化if-else代碼的文章就介紹到這了,更多相關(guān)Java優(yōu)化if-else代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot集成Kafka實(shí)現(xiàn)producer和consumer的示例代碼
這篇文章主要介紹了Springboot集成Kafka實(shí)現(xiàn)producer和consumer的示例代碼,詳細(xì)的介紹了什么是Kafka和安裝Kafka以及在springboot項(xiàng)目中集成kafka收發(fā)message,感興趣的小伙伴們可以參考一下2018-05-05
Java注解的Retention和RetentionPolicy實(shí)例分析
這篇文章主要介紹了Java注解的Retention和RetentionPolicy,結(jié)合實(shí)例形式分析了Java注解Retention和RetentionPolicy的基本功能及使用方法,需要的朋友可以參考下2019-09-09
服務(wù)器實(shí)現(xiàn)Java遠(yuǎn)程訪問(wèn)Linux服務(wù)器方式(JSch)
文章介紹了如何使用Java遠(yuǎn)程訪問(wèn)Linux服務(wù)器,主要包括建立SSH連接、使用JSch庫(kù)執(zhí)行命令、解析返回值以及關(guān)閉連接的步驟2024-11-11
springcloud如何用Redlock實(shí)現(xiàn)分布式鎖
本文主要介紹了springcloud如何用Redlock實(shí)現(xiàn)分布式鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
springboot?整合?dubbo?的實(shí)現(xiàn)組聚合詳情
這篇文章主要介紹了springboot整合dubbo的實(shí)現(xiàn)組聚合詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07
解決Swagger2返回map復(fù)雜結(jié)構(gòu)不能解析的問(wèn)題
這篇文章主要介紹了解決Swagger2返回map復(fù)雜結(jié)構(gòu)不能解析的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

