java.util.Currency.getInstance, бросающий IllegalArgumentException

Я просто пробую свои руки с java.util.Currency, но за несколько валютных кодов это бросает меня java.lang.IllegalArgumentException

это мой простой код

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

согласно документу Java

общедоступная статическая валюта 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. COU
  3. 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)

3 ответа

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

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

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

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

Отредактировано: для меня это работает:

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

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

Другие вопросы по тегам