簡體   English   中英

填充可重用方法 Java 中使用的常量映射的最佳實踐

[英]Best practice for populating constant map used in reusable method Java

我正在使用一種可重用的方法來映射兩個代碼,當我們收到“a”時,我們想在我們的代碼中使用“01”。 這是一個靜態方法,所以它只創建一次並且我們重用該方法是正確的,還是這種不好的做法並且每次我們調用這個方法時都不必要地進行處理? 這是一個很好的做法,還是我應該在其他地方創建這個地圖並只使用從它返回值的方法?

    private static String mapStatus(String duckStatus){

       
        Map<String, String> statusMap = new HashMap<String,String>();
        statusMap.put("a","01");
        statusMap.put("b","02");
        statusMap.put("c","03");

        if (!statusMap.containsKey(duckStatus)){
            throw new NullPointerException("Invalid Code does not map to status code");
        }
        return statusMap.get(duckStatus);
    }
    

根據評論, enum可能是一個不錯的選擇,但正如@kendavidson 已經提到的那樣,它是有爭議的。 從性能的角度來看,我看不到enumHashMap之間的太大區別,但在我看來HashMap會更合適,並且會提供更好的可讀性。 我在您編寫的代碼中建議的唯一區別是,使HashMap靜態填充,以便在每次調用mapStatus方法時要查找statusMap時避免HashMap建立時間。 修改后的代碼如下所示:

public class Test {
    private static final Map<String, String> STATUS_MAP = new HashMap<>();
    static {
        // Mapping the status values in Duck Creek to the Values used here
        STATUS_MAP.put("a", "01");
        STATUS_MAP.put("b", "02");
        STATUS_MAP.put("c", "03");
    }

    private static String mapStatus(String duckStatus) {
        if (!STATUS_MAP.containsKey(duckStatus)) {
            throw new IllegalArgumentException("Invalid code " + duckStatus + " does not map to status code");
        }
        return STATUS_MAP.get(duckStatus);
    }
}

筆記:

  1. 不知道,如果你想檢查duckStatusduckCreekToEDMStatusMapperSTATUS_MAP ,我使用STATUS_MAP
  2. 使用IllegalArgumentException代替NullPointerException更好,因為它在這里是合適的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM