Java程式碼重構出現很複雜的if else巢狀,假設我們的業務需要支援所有國家的名字與簡寫的轉換。
阿新 • • 發佈:2022-03-27
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()方法來判斷。