狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

如何去掉代碼中的if...else

admin
2024年6月18日 9:52 本文熱度 1058

導讀

作為一名在第一線搬磚的打工人,if...else幾乎是最常見的代碼了。下面我們一起來看一下如何干掉if...else吧,看看你掌握幾種。

1. 提前 return

這種方法一般只適合分支結構很簡單的if...else,我們可以提前 return,比如一些參數校驗。

private void processStrings(List<String> list) {
    if (null != list) {
        doSomething();
    }
}
private void processStrings(List<String> list) {
    if (null == list) {
        return;
    }
    doSomething();
}

2. Optional 判空

private String getOrderStatus(int id) {
    Order order = getById(id);
    if (order == null) {
        return "-1";
    } else {
        return order.getStatus();
    }
}

對于這種代碼可以利用 Optional 可以非常優雅地解決。

Optional類是 Java 8 中引入的一個用于處理可能為 null 的值的容器類。

return Optional.ofNullable(order).map(o -> o.getOrderStatus()).orElse("-1");

3. 枚舉

private String getOrderStatusDes(String status) {
    if ("1".equals(status)) {
        status = "未支付";
    } else if ("2".equals(status)) {
        status = "已支付";
    } else if ("3".equals(status)) {
        status = "已發貨";
    } else if ("4".equals(status)) {
        status = "已簽收";
    } else if ("5".equals(status)) {
        status = "已評價";
    }
    return status;
}

這種類型的代碼非常適合枚舉來解決。先定義一個枚舉類:

@Getter
@AllArgsConstructor
public enum OrderStatusEnum {
    UN_PAID("1","未支付"),
    PAID("2","已支付"),
    SEND("3","已發貨"),
    SING("4","已簽收"),
    EVALUATE("5","已評價");

    private String status;
    private String statusDes;
    
    public static OrderStatusEnum getDes(String status) {
        return Arrays.stream(values()).filter(o -> o.getStatus().equals(status)).findFirst().orElse(null);
    }
}

有了這個枚舉,上面代碼直接可以優化為一行代碼:

String orderStatusDes = Optional.ofNullable(OrderStatusEnum.getDes("3")).map(e -> e.getStatusDes()).orElse("");

4. 策略模式 + 工廠方法

假設有如下代碼:

if ("codeA".equals(code)) {
    doSomethingA();
else if ("codeB".equals(code)) {
    doSomethingB();
else if ("codeC".equals(code)) {
    doSomethingC();
}

可以使用使用策略模式 + 工廠方法來優化,首先創建一個處理的策略接口:

public interface HandleService {
    void doSomething();
}

具體的策略實現類:

public class HandleServiceImplA implements HandleService {
    @Override
    public void doSomething() {
        System.out.println("執行A計劃...");
    }
}

public class HandleServiceImplB implements HandleService {
    @Override
    public void doSomething() {
        System.out.println("執行B計劃...");
    }
}

public class HandleServiceImplC implements HandleService {
    @Override
    public void doSomething() {
        System.out.println("執行C計劃...");
    }
}

工廠類,統一調度,用來管理這些策略,如下:

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class HandleServiceFactory {

    private HandleServiceFactory(){
    }

    /** 使用ConcurrentHashMap以確保線程安全 */
    private static final Map<String, HandleService> SERVICE_MAP = new ConcurrentHashMap<>();

    static {
        // 初始化存入HandleService實例
        SERVICE_MAP.put("codeA"new HandleServiceImplA());
        SERVICE_MAP.put("codeB"new HandleServiceImplB());
        SERVICE_MAP.put("codeC"new HandleServiceImplC());
    }

    private static class SingletonHolder {
        private static HandleServiceFactory instance = new HandleServiceFactory();
    }

    /**
     * 獲取HandleServiceFactory的單例實例。
     * 這個方法是靜態的,可以通過類名直接調用,而不需要先創建該類的實例。
     * 它確保了整個應用中只有一個HandleServiceFactory實例存在,符合單例模式的設計原則。
     *
     * @return 返回HandleServiceFactory的單例實例。
     */

    public static HandleServiceFactory getInstance(){
        return SingletonHolder.instance;
    }

    /**
     * 根據給定的編碼獲取對應的處理服務。
     * <p>
     * 注意:傳入的code不能為空。如果傳入的編碼沒有對應的處理服務,則拋出具體的異常。
     *
     * @param code
     * @return 返回對應代碼字符串的 HandleService 實例。
     * @throws IllegalArgumentException 如果傳入的編碼沒有對應的處理服務,則拋出此異常。
     */

    public static HandleService getHandleService(String code) throws IllegalArgumentException {
        // 首先檢查code是否為null
        if (code == null) {
            throw new IllegalArgumentException("傳入的code不能為空");
        }
        // 從SERVICE_MAP中根據code獲取對應的HandleService實例
        HandleService handleService = SERVICE_MAP.get(code);
        if (handleService == null) {
            throw new IllegalArgumentException("沒有找到對應編碼為[" + code + "]的HandleService實例");
        }
        return handleService;
    }

    public void handle(String code) {
        getHandleService(code).doSomething();
    }
}

使用:

public static void main(String[] args) {
    HandleServiceFactory.getInstance().handle("codeC");
}

控制臺輸出如下:

執行C計劃...

該文章在 2024/6/18 12:44:17 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved