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.
Я получаю это исключение для нескольких кодов, и немногие из них
- уйи
- 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)
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