我在enum中有几种货币,如下所示:
public enum Currencies{USD, LVL, EUR;}
然后有一个条目列表(类Item),每个条目都有一个上述货币之一的数字(长类型)。现在我想尽可能有效地合成这个数字。
到目前为止我所做的是创建一个函数
public String getFormatedSum(){
NumberFormat mCurrencyFormatter = NumberFormat.getCurrencyInstance();
mCurrencyFormatter.setCurrency(Currency.getInstance(getCurrency().toString()));
return mCurrencyFormatter.format(getSum());
}
其中getCurrency()
将货币作为特定Item的字符串返回。
现在我知道,这有效,但我也怀疑,应该有更好的方法来做到这一点。我曾想过在地图中实例化格式化程序,然后检索我需要的格式化程序并进行格式化,但NumberFormat
类似乎是静态的。
有任何提示,或者我这样做了吗?
答案 0 :(得分:1)
首先,您的getCurrency方法可能(通过查找或直接返回Currency
(可能已经存在)。
NumberFormat
不是静态的,但有一个静态工厂方法用于创建实例。您可以将实例保存在Map
:
Map<Currency, NumberFormat> formatters = new HashMap<>();
...
NumberFormat getCurrencyFormatter(Currency currency) {
NumberFormat result = formatters.get(currency);
if (result == null) {
result = NumberFormat.getCurrencyInstance();
result.setCurrency(currency);
formatters.put(currency, result);
}
return result;
}