【问题标题】:Currency class only one instance per currency?货币类每种货币只有一个实例?
【发布时间】:2013-08-26 08:14:13
【问题描述】:

来自this官方oracle java教程:

请注意,Currency 类的设计目的是永远不会有更多 比任何给定货币的一个 Currency 实例。因此,有 没有公共构造函数。如前面的代码示例所示, 您使用 getInstance 方法获取 Currency 实例。

对于给定的货币,拥有多个 Currency 实例的风险是什么? 提前致谢。

【问题讨论】:

  • 风险在于您修改了一个实例上的属性,同时使用了另一个不知道更改的实例。
  • @njzk2 你能给我提供一个这样修改的例子吗?
  • 了解单例模式
  • @njzk2 你说“风险是你在一个实例上修改了一个属性”,我回答“请给我一个这样的修改的例子”..问题是不可能修改甚至是单个实例。查看 BMT 答案,显然这是一个设计选择,是的,它将为每个 ISO 使用一个单例

标签: java format currency


【解决方案1】:

参考链接Currency

表示特定地区的货币。每种货币 由其 ISO 4217 代码标识,并且只有一个实例 每个货币都存在类别。结果,创建了实例 通过getInstance() 方法而不是使用 构造函数。

正如Java Doc 所说,您可以通过创建一个名为<JAVA_HOME>/lib/currency.properties 的属性文件来取代Java 运行时货币数据。属性文件的内容分别是 ISO 3166 国家代码和 ISO 4217 货币数据的键/值对。价值部分由货币的三个 ISO 4217 值组成,即字母代码、数字代码和次要单位。这三个 ISO 4217 值用逗号分隔。以'#' 开头的行被视为注释行。例如,

示例货币属性

JP=JPZ,999,0

将取代日本的货币数据。

【讨论】:

  • 所以它更像是一种设计一致性/凝聚力之类的东西,而不是功能性的东西?
  • 是的,您不能通过实例更新它,但可以查看更新后的答案。
猜你喜欢
  • 2015-07-20
  • 2014-01-28
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 2015-06-08
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多