区域敏感服务 SPI

原文: https://docs.oracle.com/javase/tutorial/i18n/locale/services.html

此功能启用与区域设置相关的数据和服务的插件。通过这种方式,第三方能够在java.textjava.util包中提供大多数区域设置敏感类的实现。

SPI _(服务提供者接口)*的实现基于由服务提供者实现的抽象类和 Java 接口。在运行时,Java 类加载机制用于动态定位和加载实现 SPI 的类。

您可以使用区域设置敏感服务 SPI 来提供以下区域设置敏感实现:

  • BreakIterator个对象
  • Collator个对象
  • Locale类的语言代码,国家/地区代码和变体名称
  • 时区名称
  • 货币符号
  • DateFormat个对象
  • DateFormatSymbol个对象
  • NumberFormat个对象
  • DecimalFormatSymbols个对象

相应的 SPI 包含在java.text.spijava.util.spi包中:

| java.util.spi | java.text.spi | |

  • CurrencyNameProvider
  • LocaleServiceProvider
  • TimeZoneNameProvider
  • CalendarDataProvider

    |

  • BreakIteratorProvider

  • CollatorProvider
  • DateFormatProvider
  • DateFormatSymbolsProvider
  • DecimalFormatSymbolsProvider
  • NumberFormatProvider

    |

例如,如果要为新语言环境提供NumberFormat对象,则必须实现java.text.spi.NumberFormatProvider类。您需要扩展此类并实现其方法:

  • getCurrencyInstance(Locale locale)
  • getIntegerInstance(Locale locale)
  • getNumberInstance(Locale locale)
  • getPercentInstance(Locale locale)
  1. Locale loc = new Locale("da", "DK");
  2. NumberFormat nf = NumberFormatProvider.getNumberInstance(loc);

这些方法首先检查 Java 运行时环境是否支持所请求的语言环境;如果是这样,他们会使用这种支持。否则,这些方法调用已安装供应器的getAvailableLocales()方法以获取适当的接口,以查找支持所请求区域设置的供应器。