例如,中国货币有ISO 4217
代码CNY
。由于该货币的自由全局交易受到限制,因此存在第二种“离岸”货币等价物,称为 CNH
。维基百科有一点 summary这一切。
在 Java 7
中,有一个 method for updating JVM 附带的一组三字母 ISO 4217
代码。但是,它不能用于向现有国家/地区代码添加单独的货币代码:它会将 CNY
替换为 CNH
,这对我的目的不利。
如何将 CNH
(不在 ISO 4217
列表中)添加到 Java 7
中的可用货币集,而不覆盖 CNY
?
换句话说,如何获得一个国家/地区的多个货币代码?
注意这个问题:How do I add the new currency code to Java?针对 Java 6 被询问和回答。但是替换 java.util.CurrencyData
的策略不起作用,因为该文件不再存在。
最佳答案
这里的关键在 change that's part of Java 7 中允许更新货币列表,而无需通过替换名为 currency.data
的文件重建 rt.jar。使用这种方法,而不是 currency.properties
覆盖方法,您可以添加新的货币代码,而不会影响同一国家/地区的其他代码。
没有说的是如何着手实际构建一个新的 currency.data
。
此文件是从名为 CurrencyData.properties
的文件生成的,该文件可以在 java/util 中的 OpenJDK 源代码中找到。
我所做的是复制在 OpenJDK source 中找到的 CurrencyData.properties
(openjdk\jdk\src\share\classes\java\util
),并更改了行:
BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNY156-COP170-CRC188-CSD891-CUP192-\
到
BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNH156-CNY156-COP170-CRC188-CSD891-CUP192-\
然后我在 openjdk\jdk\make\tools\src\build\tools\generatecurrencydata
的源代码分发中获取了 GenerateCurrencyData.java
文件。该实用程序采用与 CurrencyData.properties 相同的格式从 System.In 获取输入,并将其转换为 currency.data 文件。我做了一个小改动,以便它使用 FileInputStream 而不是 System.In:
currencyData.load(System.in);
到
currencyData.load(new FileInputStream(fileName));
在您编辑的 CurrencyData.properties 文件上运行它,将原始 .data 文件放在安全的地方后,将生成的 currency.data 文件放入您的 JRE\lib 目录,您现在可以运行使用 的代码Currency.getInstance("CNH")
.
关于java - 如何为 Java 7 中的现有国家/地区代码向 java.util.Currency 添加新货币?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12432527/