抛出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. 

我收到这个例外的几个代码,其中很少有

  1. UYI
  2. COU
  3. 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工作正常,而不是UYICOP而不是COU哥伦比亚TMT也不适合我。

编辑:对我来说,这工作:

  Currency curr = java.util.Currency.getInstance("UYU"); System.out.println("Currency code:" + curr.getCurrencyCode()); 

UYI不符合ISO 4217标准,这里有一个列表: http : UYI