抛出IllegalArgumentException的java.util.Currency.getInstance
我只是尝试使用java.util.Currency
,但是对于几个货币代码,它抛出java.lang.IllegalArgumentException
这是我的简单代码
java.util.Currency c = java.util.Currency.getInstance(code);
按照java doc
public static Currency getInstance(String currencyCode)
Returns the Currency instance for the given currency code. Parameters: currencyCode - the ISO 4217 code of the currency Returns: the Currency instance for the given currency code Throws: NullPointerException - if currencyCode is null IllegalArgumentException - if currencyCode is not a supported ISO 4217 code.
我收到这个例外的几个代码,其中很少有
- UYI
- COU
- TMT
根据ISO_4217 ,以上所有代码都是官方的ISO 4217货币名称,我不知道为什么我在这种情况下得到这个例外? 我是否需要做其他事情或需要将一些其他信息传递给JVM才能获得正确的值? 任何帮助清除我的困惑是非常明显的或可以指向我正在指向的ISO 4217货币 ,因为我可以在ISO 4217列表中看到上面的代码所以它可能我正在查看错误的文档/参考。
为了提供更多的见解,这里是堆栈跟踪
Exception in thread "main" java.lang.IllegalArgumentException at java.util.Currency.getInstance(Unknown Source) at java.util.Currency.getInstance(Unknown Source) at CurrencyTest1.main(CurrencyTest1.java:10)
和Java版本
java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_21-b07) Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)
这是一个有趣的问题。
COU和UYI都不是真实货币。 COU是旧的委内瑞拉货币(不再使用)而UYI是一种指数货币,可能被银行用来整理汇率。
在java 1.7.0_u7中,当前TMT工作正常。 TMT于2009年推出,因此Java 6不知道该代码是有道理的。
对于乌拉圭而言, UYU
工作正常,而不是UYI
和COP
而不是COU
哥伦比亚TMT
也不适合我。
编辑:对我来说,这工作:
Currency curr = java.util.Currency.getInstance("UYU"); System.out.println("Currency code:" + curr.getCurrencyCode());
UYI
不符合ISO 4217标准,这里有一个列表: http : UYI