【问题标题】:What can be used instead of If-else statement in this code? [closed]在这段代码中可以使用什么来代替 If-else 语句? [关闭]
【发布时间】:2016-08-02 10:49:44
【问题描述】:
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;    
}

【问题讨论】:

标签: java loops if-statement conditional


【解决方案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());
}

【讨论】:

    【解决方案2】:

    为什么不使用地图来保存这些currency_code->currency?如果使用,您可以简单地使用 CurrencyMap.get(currency_code) 来替换所有这些 if-else。

    【讨论】:

      【解决方案3】:

      您可以使用多种替代方法。一个是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());
      }
      

      【讨论】:

        猜你喜欢
        • 2018-03-29
        • 2013-08-18
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 2014-01-02
        • 1970-01-01
        • 2014-07-21
        • 2016-08-30
        相关资源
        最近更新 更多