public static Currency getByCurrencyCode(String pCurrencyCode){
if (CURRENCY_CODE_USD.equalsIgnoreCase(pCurrencyCode)){
return US_DOLLAR;
}
if (CURRENCY_CODE_HKD.equalsIgnoreCase(pCurrencyCode)){
return HK_DOLLAR;
}
if (CURRENCY_CODE_MYR.equalsIgnoreCase(pCurrencyCode)){
return MALAYSIAN_RINGGIT;
}
return null;
}
答案 0 :(得分:1)
您可以填充Map<String, Currency>
并根据名称返回Currency
(并使名称始终为大写或小写)。像,
private static Map<String, Currency> map = new HashMap<>();
static {
map.put(CURRENCY_CODE_USD.toLowerCase(), US_DOLLAR);
map.put(CURRENCY_CODE_HKD.toLowerCase(), HK_DOLLAR);
map.put(CURRENCY_CODE_MYR.toLowerCase(), MALAYSIAN_RINGGIT);
}
public static Currency getByCurrencyCode(String pCurrencyCode) {
return map.get(pCurrencyCode.toLowerCase());
}
答案 1 :(得分:1)
您可以使用许多替代方案。一个是switch
声明:
public static Currency getByCurrencyCode(String pCurrencyCode) {
switch (pCurrencyCode.toLowerCase()) {
case CURRENCY_CODE_USD:
return US_DOLLAR;
case CURRENCY_CODE_HKD:
return HK_DOLLAR;
case CURRENCY_CODE_MYR:
return MALAYSIAN_RINGGIT;
default:
return null;
}
}
但是,这要求各种CURRENCY_*
变量是编译时String
常量,而pCurrencyCode
不能是null
。我假设CURRENCY_*
变量都是小写的,但如果它们是大写的,只需改用pCurrencyCode.toUpperCase()
。
另一种方法是定义从String
到Currency
对象的地图并直接查找答案:
private static Map<String, Currency> sCurrencyMap;
static {
sCurrencyMap = new HashMap<>();
sCurrencyMap.put(CURRENCY_CODE_USD, US_DOLLAR);
sCurrencyMap.put(CURRENCY_CODE_HKD, HK_DOLLAR);
sCurrencyMap.put(CURRENCY_CODE_MYR, MALAYSIAN_RINGGIT);
}
public static Currency getByCurrencyCode(String pCurrencyCode) {
return sCurrencyMap.get(pCurrencyCode.toLowerCase());
}
答案 2 :(得分:0)
为什么不使用地图来保存这些currency_code-&gt;货币?如果使用,您只需使用CurrencyMap.get(currency_code)替换所有这些if-else。