抛出IllegalArgumentException的java.util.Currency.getInstance

时间:2012-10-06 16:59:42

标签: java

我只是尝试使用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
  4. 根据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)
    

3 个答案:

答案 0 :(得分:6)

这是一个有趣的问题。

COU和UYI都不是真实货币。 COU是委内瑞拉的旧货币(不再使用),UYI是一种指数货币,可能被银行用来整理汇率。

在java 1.7.0_u7中,当前 TMT 正常工作。 TMT于2009年推出,因此Java 6不知道该代码是有意义的。

答案 1 :(得分:1)

对于乌拉圭UYU工作正常而不是UYICOP而不是COU哥伦比亚TMT也不适合我。

答案 2 :(得分:0)

EDITED: 对我来说这很有效:

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

UYI不在ISO 4217标准中,这是一个列表:http://www.xe.com/iso4217.php