2016-04-12 6 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

Вы можете попытаться использовать перечисление или переключатель – Rugal

+0

вы можете объяснить один цикл этого вопроса с помощью примера 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

Почему бы не использовать карту для хранения валюты currency_code->? Если используется, вы можете просто использовать 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 констант и 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()); 
} 
Смежные вопросы