在此代码中可以使用什么代替If-else语句?

时间:2016-04-12 03:01:46

标签: java loops if-statement conditional

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;    
}

3 个答案:

答案 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()

另一种方法是定义从StringCurrency对象的地图并直接查找答案:

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。