2016-04-12 2 views
-3
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

https://docs.oracle.com/javase/8/docs/technotes/guides/language /strings-switch.html –

+0

enumを使用するか、スイッチ – Rugal

+0

を試してみると、この質問の1つのループをexample sirと説明できますか? –

答えて

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()); 
} 
0

なぜこれらの通貨コードを保持するためにマップを使用しない?これを使用する場合は、単にCurrencyMap.get(currency_code)を使用して、これらのすべてのif-elseを置き換えることができます。

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定数でとpCurrencyCodenullすることができないということを必要とします。私は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()); 
} 
関連する問題