0

次のように、列挙型にいくつかの通貨があります。

public enum Currencies{USD, LVL, EUR;}

次に、(クラスItemの)エントリのリストがあり、すべてのエントリには、前述の通貨の1つの番号(タイプlong)があります。ここで、この数値をできるだけ効率的にフォーマットしたいと思います。

私がこれまでに行ったことは、関数を作成することです

public String getFormatedSum(){
    NumberFormat mCurrencyFormatter = NumberFormat.getCurrencyInstance();
    mCurrencyFormatter.setCurrency(Currency.getInstance(getCurrency().toString()));
    return mCurrencyFormatter.format(getSum()); 
}

ここでgetCurrency()、通貨を特定のアイテムの文字列として返します。

これでうまくいくことはわかっていますが、これを行うにはもっと良い方法があるはずだと思います。マップでフォーマッターをインスタンス化してから、必要なフォーマッターを取得してフォーマットすることを考えていましたが、NumberFormatクラスは静的なようです。

ヒントはありますか、それとも私はこれを正しく行っていますか?

4

1 に答える 1

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;
}
于 2012-06-11T12:03:43.780 に答える