java - 如何为 Java 7 中的现有国家/地区代码向 java.util.Currency 添加新货币?

标签 java jvm currency java-7

例如,中国货币有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/

相关文章:

java - java.time.format.DateTimeFormatter.ISO_INSTANT 的格式字符串?

Java 7 : throw exception without stack trace

jvm - Java类加载可视化/分析工具

asp.net-mvc-4 - 更改 [DataType.Currency] 呈现 html 的方式

javascript - 货币操作的 JavaScript 数字类型有多安全?

Java货币显示名称国际化

java - 不使用instanceOf来识别不同类数组中的一个类

java - java编程语言的局限性(缺点)?

java - 以独立于平台的方式将环境变量传递给 JVM

java - 这些 Java 字节偏移量是如何计算的?