【问题标题】:java.util.Currency.getInstance throwing IllegalArgumentExceptionjava.util.Currency.getInstance 抛出 IllegalArgumentException
【发布时间】:2012-10-06 16:59:41
【问题描述】:

我只是在尝试使用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. 优易
  2. TMT

根据ISO_4217,以上所有代码都是官方 ISO 4217 货币名称,我不知道为什么在这种情况下我会收到此异常? 我需要做其他事情还是需要将一些其他信息传递给 JVM 以获得正确的值? 消除我的困惑的任何帮助都是非常明显的,或者可以将我指向 java doc 所指向的 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)

【问题讨论】:

  • 您能否添加堆栈跟踪并说明您正在运行哪个 JDK 版本?
  • @Augusto:我更新了我的帖子,看看。
  • 我可以用 Java 1.7 重现您提到的货币代码的问题。
  • @roelandvanbeek:这很奇怪! ISO 4217 下似乎不支持这些货币代码。
  • 只需对照Currency.getAvailableCurrencies()检查您的货币。在我的盒子上 TMT 可用,其他的不可用。

标签: java


【解决方案1】:

这是一个有趣的问题。

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

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

【讨论】:

  • 请看我的编辑。 TMT 是新代码,所以在 java 6 上不可用是有道理的
【解决方案2】:

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

【讨论】:

  • 是的,它在我的列表中,因此它的工作正常。我不确定 UYI 虽然
【解决方案3】:

编辑: 对我来说这是可行的:

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

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

【讨论】:

  • 你可以试试这行代码java.util.Currency.getInstance("UYI"); 并更新结果是什么?
猜你喜欢
  • 2014-09-18
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多