Java.util.Currency.getInstance бросает IllegalArgumentException

Я просто пытаюсь разобраться с 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.

Я получаю это исключение для нескольких кодов, и некоторые из них

  • уйи
  • COU
  • TMT

согласно ISO_4217, все вышеперечисленные коды являются официальными именами ISO 4217, я не уверен, почему я получаю это исключение в этом дело? Нужно ли мне что-то делать или нужно передавать некоторую другую информацию в JVM для получения правильных значений? любая помощь, чтобы очистить мою путаницу, действительно заметна или может указывать на валюту ISO 4217, которую java doc указывает, поскольку я могу видеть выше коды в списке 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)

Ответ 1

Это интересная проблема.

Оба COU и UYI не являются реальными валютами. COU - это старая венесуэльская валюта (не используется больше), а UYI - индексированная валюта, которая, вероятно, используется банками для определения обменных курсов.

В java 1.7.0_u7 TMT прекрасно работает. TMT был представлен в 2009 году, поэтому имеет смысл, что Java 6 не знает этого кода.

Ответ 2

Редакция: Для меня это работает:

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

UYI не соответствует стандарту ISO 4217, вот список: http://www.xe.com/iso4217.php

Ответ 3

Для Уругвая UYU работает нормально вместо UYI и COP вместо COU для Columbia TMT тоже не работает для меня.