Module java.base
Package java.util.spi

Class AbstractResourceBundleProvider

java.lang.Object
java.util.spi.AbstractResourceBundleProvider
所有已实现的接口:
ResourceBundleProvider

public abstract class AbstractResourceBundleProvider extends Object implements ResourceBundleProvider
AbstractResourceBundleProvider是一个抽象类,为ResourceBundleProvider的提供者实现类提供基本支持。

资源包可以打包在一个或多个命名模块中,服务提供者模块。资源包的消费者是调用ResourceBundle.getBundle(String)的调用方。为了使消费者模块能够加载由另一个模块提供的资源包"com.example.app.MyResources",它将使用服务加载器机制。必须定义一个名为"com.example.app.spi.MyResourcesProvider"的服务接口,而服务提供者模块将提供一个实现类"com.example.app.spi.MyResourcesProvider"如下:

 import com.example.app.spi.MyResourcesProvider;
 class MyResourcesProviderImpl extends AbstractResourceBundleProvider
     implements MyResourcesProvider
 {
     public MyResourcesProviderImpl() {
         super("java.properties");
     }
     // 此提供者将资源包映射到每种语言的包
     protected String toBundleName(String baseName, Locale locale) {
         return "p." + locale.getLanguage() + "." + baseName;
     }

     public ResourceBundle getBundle(String baseName, Locale locale) {
         // 此模块仅提供法语资源包
         if (locale.equals(Locale.FRENCH)) {
              return super.getBundle(baseName, locale);
         }
         // 否则返回null
         return null;
     }
 }
详情请参阅ResourceBundleProvider
自 JDK 9 起:
9
参见:
  • Constructor Details

    • AbstractResourceBundleProvider

      protected AbstractResourceBundleProvider()
      用"java.properties"格式构造一个AbstractResourceBundleProvider。此构造函数等效于AbstractResourceBundleProvider("java.properties")
    • AbstractResourceBundleProvider

      protected AbstractResourceBundleProvider(String... formats)
      用指定的formats构造一个AbstractResourceBundleProvidergetBundle(String, Locale)方法查找给定formats的资源包。 formats必须为"java.class"或"java.properties"。
      参数:
      formats - 用于加载资源包的格式
      抛出:
      NullPointerException - 如果给定的formats为null
      IllegalArgumentException - 如果给定的formats不是"java.class"或"java.properties"。
  • Method Details

    • toBundleName

      protected String toBundleName(String baseName, Locale locale)
      返回此提供者提供的给定baseNamelocale的包名称。
      API 注释:
      如果资源包提供者的资源包与资源包的基本名称相同且该包未分割到其他命名模块中,则资源包可以打包在相同的包中。如果有多个提供者提供给定基本名称的资源包,则可以将资源包打包为每种语言分组或每个区域分组以消除分割包。

      例如,如果baseName"p.resources.Bundle",则Locale("ja", "", "XX")Locale("en")的资源包名称分别可以为 "p.resources.ja.Bundle_ja_ _XX""p.resources.Bundle_en"

      此方法从getBundle(String, Locale)方法的默认实现中调用。

      实现注释:
      此方法的默认实现与ResourceBundle.Control.toBundleName(String, Locale)的实现相同。
      参数:
      baseName - 资源包的基本名称,完全限定的类名
      locale - 应加载资源包的区域设置
      返回:
      资源包的包名称
    • getBundle

      public ResourceBundle getBundle(String baseName, Locale locale)
      返回给定baseNamelocaleResourceBundle
      指定者:
      getBundle 在接口 ResourceBundleProvider
      实现注释:
      此方法的默认实现调用toBundleName方法以获取baseNamelocale的包名称,并在此提供者的模块中查找该包名称的资源包。它仅搜索构造此提供者时指定的格式。
      参数:
      baseName - 资源包的基本包名称,完全限定的类名。
      locale - 应实例化资源包的区域设置
      返回:
      给定baseNamelocaleResourceBundle,如果未找到资源包则返回null
      抛出:
      NullPointerException - 如果baseNamelocalenull
      UncheckedIOException - 如果在加载资源包期间发生任何IO异常