Java優化if-else代碼
前言
開發系統一些狀態,比如訂單狀態:數據庫存儲是數字或字母,但是需要顯示中文或英文,一般用到if-else代碼判斷,但這種判斷可讀性比較差,也會影響後期維護,也比較容易出現bug。比如:
假設狀態對應關係: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”; }
方案一: 數組
這種僅限通過數字獲取到字母或者中文。
首先設置數組
String[] statusArray = {"","agree","refuse","finish"};
通過數組的位置獲取數組的值
int status; String statusStr = statusArray[status];
優點: 佔用內存少
缺點: 狀態值只能是數字,而且還需要考慮數組越界情況
方案二:HashMap
創建和添加map:
private static final Map<Integer,String> map = new HashMap<>(); static { map.put(1,"agree"); map.put(2,"refuse"); map.put(3,"finish"); }
這種有兩種求解方式,通過 key 獲取 value 以及通過 value 獲取 key,
由 key 獲取 value
直接使用 get 方法即可。這裏的key相對於數組解法,不限制 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; } }
優點:狀態值不限制數字
缺點:佔用空間大
解決方案三、枚舉
先定義一個枚舉類
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 代碼塊可以優化成一行代碼
String statusStr = TestEum.of(status);
總結
- 如果通過數字獲取描述,使用數組即可。
- 如果通過描述獲取數字,使用枚舉和HashMap都可以。
「其他文章」
- 設計模式【4】-- 建造者模式詳解
- 分佈式鎖及其實現
- TDSQL | 國產化浪潮下,數據庫 雲如何跑上核心業務?
- 為了生成唯一id,React18專門引入了新Hook:useId
- Java SPI機制從原理到實戰
- Rust 審核團隊“一夜之間”集體辭職:開源社區治理話題再被熱議
- PHP 基金會,是個好事 (PHP Foundation)
- 0.99M,150FPS,移動端超輕量目標檢測算法PP-PicoDet來了!
- Shell 腳本避坑指南(一)
- KVO原理分析
- Markdown語法基礎
- 升級到Java 17沒這麼簡單
- 無處不在的 Kubernetes,難用的問題解決了嗎?
- Spark 架構設計與原理思想
- 如何用 Flutter開發一個直播應用
- 消息隊列RocketMQ應對雙十一流量洪峯的“六大武器”
- 面試官問我JVM內存結構,我真的是
- Hermes將成為React Native默認的JS引擎
- 做一名真正的軟件工程師
- CDP客户數據管理平台體系化搭建