Java中減少if-else的幾種方式
有時候,代碼中充斥著大量的if-else語句并不是讓你的同事們完全理解的正確方式。
所以,無論你是初學者還是已經(jīng)很擅長你的工作,都應該讓你的代碼更加復雜和可讀。
你需要嘗試的第一件事是在你的代碼中去除if-else語句。以下是一些建議。
1: 立即返回
假設有以下的代碼:
public boolean isValid(String condition) {
boolean result;
if (condition != null){
if (condition.equals("hi") {
result = true;
} else {
result = false;
}
} else {
result= false;
}
return result;
}這種代碼通常用于提前返回,刪除了不必要的else。
public boolean isValid(String condition) {
if (condition == null) {
return false;
}
if (condition.equals("hi") {
return true
}
return false;
}這種方法通常只適用于簡單的結構,我們可以提前返回來消除一些不必要的if-else語句。
2: 枚舉
比如以下代碼:
public String getLabel(int status) {
String label;
if (1 == status) {
label = "Padding";
} else if (2 == status) {
label = "Paid";
} else if (3 == status) {
label = "Success";
} else if (4 == status) {
label = "Failed";
}
return label;
}也許你可以說,沒有人寫這樣的代碼。但實際上,這種寫法是相當常見的。每個公司都有這樣的代碼
這種代碼用枚舉就能解決:
@Getter
@AllArgsConstructor
public enum StatusLabelEnum {
Padding(1, "Padding"),
Paid(2, "Paid"),
Success(3, "Success"),
Failed(4, "Failed"),
;
private int status;
private String label;
public static String getLabelByStatus(int status) {
for (StatusLabelEnum labelEnum : StatusLabelEnum.values()) {
if (labelEnum.getStatus() == status) {
return labelEnum.getLabel();
}
}
return "Unknown";
}
}通過這種枚舉,上述代碼可以直接優(yōu)化為一行代碼:
public String getLabel(int status) {
return StatusLabelEnum.getLabelByStatus(status);
}當然正常的項目不是這么簡單的k-v鍵值對的,還有更復雜的邏輯,如果返回值是固定的,枚舉也是一個簡單的解決方案。
3: Optional 來解決if判斷
我相信你們肯定有項目,在這些項目中有一個非空的判斷,如果為空,則拋出異?;蚍祷刂怠?
public int getOrderStatus(UUID id) {
Order order = getOrderById(id);
if (order == null) {
return 1;
} else {
return order.getOrderStatus();
}
}我們可以使用Optional來非常優(yōu)雅地解決它:
public int getOrderStatus(UUID id) {
Order order = getOrderById(id);
return Optional.ofNullable(order).map(Order::getOrderStatus).orElse(1);
}4: 數(shù)據(jù)表驅(qū)動
表驅(qū)動方法是一種允許您在不使用過多的if-else語句的情況下,在表格中查找信息的方法。
如有以下代碼:
if ("code1".equals(action)) {
doAction1();
} else if ("code2".equals(action)) {
doAction2();
} else if ("code3".equals(action)) {
doAction3();
} else if ("code4".equals(action)) {
doAction4();
} else if ("code5".equals(action)) {
doAction5();
}優(yōu)化代碼:
//Definition
Map<String, Function<?> action> actionMap = new HashMap<>();
action.put("code1",() -> {doAction1()});
action.put("code2",() -> {doAction2()});
action.put("code3",() -> {doAction3()});
action.put("code4",() -> {doAction4()});
action.put("code5",() -> {doAction5()});
//use case
actionMap.get(action).apply();這并不是一種很好的實現(xiàn)表驅(qū)動方法的方式,因為代碼可能會顯得非常臃腫
多實現(xiàn)類的方法優(yōu)化:
//1. Define interface
public interface ActionService {
void doAction();
}
//2. Define implementations
public class ActionService1 implements ActionService{
public void doAction() {
//do something
}
}
//3. add to table
Map<String, ActionService> actionMap = new HashMap<>();
action.put("code1",new ActionService1());
action.put("code2",new ActionService2());
action.put("code3",new ActionService3());
action.put("code4",new ActionService4());
action.put("code5",new ActionService5());
//4. use it
actionMap.get(action).doAction();到此這篇關于Java中減少if-else的幾種方式的文章就介紹到這了,更多相關Java 減少if-else內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java Spring數(shù)據(jù)單元配置過程解析
這篇文章主要介紹了Java Spring數(shù)據(jù)單元配置過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-12-12
SpringBoot+websocket實現(xiàn)消息對話功能
WebSocket是一種在Web應用程序中實現(xiàn)實時雙向通信的技術,它可以用于在線游戲、在線聊天、推送通知、實時監(jiān)控等,并且比傳統(tǒng)的輪詢技術更加高效和可靠,本文就給大家介紹基于SpringBoot+websocket實現(xiàn)消息對話功能,感興趣的小伙伴可以自己動手試一試2023-09-09
Spring + Mybatis 項目實現(xiàn)動態(tài)切換數(shù)據(jù)源實例詳解
這篇文章主要介紹了Spring + Mybatis 項目實現(xiàn)動態(tài)切換數(shù)據(jù)源的相關資料,需要的朋友參考下吧2017-04-04

