1. 程式人生 > 其它 >Java程式碼重構出現很複雜的if else巢狀,假設我們的業務需要支援所有國家的名字與簡寫的轉換。

Java程式碼重構出現很複雜的if else巢狀,假設我們的業務需要支援所有國家的名字與簡寫的轉換。

1、題目(程式碼重構)

在業務場景中,經常會出現很複雜的if else巢狀,假設我們的業務需要支援所有國家的名字與簡寫的轉換,以目前的寫法,會有上百個if else。

  • 請在目前程式碼的基礎上,試著優化寫法,使得此段程式碼更好維護。
  • 請以註釋的形式寫明重構優化的理由

2、程式碼片段

import java.util.HashMap;

/**
 * Created by Q on 2022/3/27.
 */
public class CountryNameConverter {
    // 請按你的實際需求修改引數
    public String convertCountryName(String fullName) {
        if ("china".equalsIgnoreCase(fullName)) {
            return "CN";
        } else if ("america".equalsIgnoreCase(fullName)) {
            return "US";
        } else if ("japan".equalsIgnoreCase(fullName)) {
            return "JP";
        } else if ("england".equalsIgnoreCase(fullName)) {
            return "UK";
        } else if ("france".equalsIgnoreCase(fullName)) {
            return "FR";
        } else if ("germany".equalsIgnoreCase(fullName)) {
            return "DE";
        } else {
            throw new RuntimeException("unknown country");
        }
    }
}

3、重構程式碼

import java.util.HashMap;

public class CountryNameConverter {
    // 請按你的實際需求修改引數
    public String convertCountryName(String fullName) {

        HashMap<String, String> Sites = new HashMap<String, String>();
        // 實際大量資料時可以考慮其他初始化程式碼塊中遍歷新增鍵值對
        Sites.put("china","CN");
        Sites.put("america","US");
        Sites.put("japan","JP");
        Sites.put("england", "UK");
        Sites.put("france", "FR");
        Sites.put("germany", "DE");

        return Sites.containsKey(fullName) ? Sites.get(fullName) : "unknown country"  ;

}
    public static void main(String[] args) {
        CountryNameConverter cnc = new CountryNameConverter();
        System.out.println(cnc.convertCountryName("china")); //CN
        System.out.println(cnc.convertCountryName("ch")); //unknown country
    }
}

4、擴充套件

HashMap判斷鍵是否為 null 用containsKey(),而不用get():

HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。

當get()方法返回null值時,即可以表示HashMap中沒有該鍵,也可以表示該鍵所對應的值為null。

因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵,而應該用containsKey()方法來判斷。

其他方案