java.util.Currency.getInstance 抛出 IllegalArgumentException

13

我只是在尝试使用java.util.Currency,但对于一些货币代码,它会抛出java.lang.IllegalArgumentException异常。

这是我的简单代码:

java.util.Currency c = java.util.Currency.getInstance(code);

根据Java文档

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传递一些其他信息以获取正确的值吗?能够帮助我解决困惑的任何帮助都将不胜感激,或者可以指向java doc所指的 ISO 4217 currency ,因为我可以看到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)

你能添加堆栈跟踪并说明你正在运行哪个JDK版本吗? - Augusto
@Augusto:我已经更新了我的帖子,请看一下。 - Umesh Awasthi
我可以使用Java 1.7重现您提到的货币代码问题。 - roelandvanbeek
@roelandvanbeek:这很奇怪!!看起来这些不是ISO 4217支持的货币代码。 - Umesh Awasthi
@Umesh Awasthi:嗯,我没有意识到。抱歉。 - home
显示剩余2条评论
3个回答

6

这是一个有趣的问题。

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

在java 1.7.0_u7中,货币TMT可以正常工作。TMT是在2009年引入的,因此Java 6不知道该代码是有道理的。


请看我的编辑。TMT是新代码,因此在Java 6上不可用是有道理的。 - Augusto

1
对于乌拉圭,使用 UYU 而不是 UYI 以及哥伦比亚使用 COP 而不是 COU 是可以正常工作的。但是对于土库曼斯坦,TMT 对我来说无法工作。

是的,它在我的列表中,并且对此它很好用。但我不确定UYI是否可以这样。 - Umesh Awasthi

0

修改后的代码:

对我来说这很有效:

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

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


1
你可以尝试一下这行代码java.util.Currency.getInstance("UYI"); 并更新一下结果吗? - Umesh Awasthi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接