MonetaryAmountFormat
をMoneta JSR-354の実装を使用してカスタマイズする方法は本当に混乱しています。Moneta(JavaMoney)JSR354の実装を使用してMonetaryAmountFormatをカスタマイズする
私の意図は、1.23
と$3.45
の両方をMonetaryAmount
として解析できるようにすることです。ここで
は私のユニットテストである:ここで
@Test
public void testString() {
Bid bid = new Bid("1.23");
assertEquals(1.23, bid.getValue(), 0.0);
System.out.println(bid);
bid = new Bid("$3.45");
assertEquals(3.45, bid.getValue(), 0.0);
System.out.println(bid);
}
は私のクラスである:
public final class Bid {
private static final CurrencyUnit USD = Monetary.getCurrency("USD");
private MonetaryAmount bid;
/**
* Constructor.
*
* @param bidStr the bid
*/
public Bid(String bidStr) {
MonetaryAmountFormat format = MonetaryFormats.getAmountFormat(
AmountFormatQueryBuilder.of(Locale.US)
.set("pattern", "###.##")
.build());
if (StringUtils.isNotBlank(bidStr)) {
bidStr = bidStr.trim();
bidStr = bidStr.startsWith("$") ? bidStr.substring(1) : bidStr;
try {
bid = FastMoney.parse(bidStr, format);
} catch (NumberFormatException e) {
bid = FastMoney.of(0, USD);
}
}
}
/**
* Constructor.
*
* @param bidDouble the bid
*/
public Bid(double bidDouble) {
bid = FastMoney.of(bidDouble, USD);
}
public double getValue() {
return bid.getNumber().doubleValue();
}
}
私は本当に単一MonetaryAmountFormat
を使用して$
の有無にかかわらずbidStr
を解析できるようにしたかったですしかし、多くの時間を費やして、$
をオプションにする方法を見つけようとした後、私は諦めました。残念ながら、1.23
をUSDとして解析する方法を見つけることさえできません。モネタはNullPointerException
を投げます。 AmountFormatQueryBuilder
を使用して通貨を設定する必要がありますか? AmountFormatQueryBuilder
を使用して設定できるすべてのキーは何ですか?私はドキュメントを探しましたが、pattern
のようないくつかの一般的なキーを除き、どこでも見つけることができませんでした。