模块 java.base

类 AbstractResourceBundleProvider

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

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

资源包可以打包在一个或多个命名模块中,service provider modules。资源包的 consumer 是调用 ResourceBundle.getBundle(String) 的那个。为了让消费者模块加载另一个模块提供的资源包“com.example.app.MyResources”,它将使用服务加载器机制。必须定义名为“com.example.app.spi.MyResourcesProvider”的服务接口,service provider module 将提供“com.example.app.spi.MyResourcesProvider”的实现类,如下所示:

 import com.example.app.spi.MyResourcesProvider;
 class MyResourcesProviderImpl extends AbstractResourceBundleProvider
   implements MyResourcesProvider
 {
   public MyResourcesProviderImpl() {
     super("java.properties");
   }
   // this provider maps the resource bundle to per-language package
   protected String toBundleName(String baseName, Locale locale) {
     return "p." + locale.getLanguage() + "." + baseName;
   }

   public ResourceBundle getBundle(String baseName, Locale locale) {
     // this module only provides bundles in French
     if (locale.equals(Locale.FRENCH)) {
       return super.getBundle(baseName, locale);
     }
     // otherwise return null
     return null;
   }
 } 
有关详细信息,请参阅 ResourceBundleProvider
自从:
9
参见:
  • 构造方法详细信息

    • 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 为空
      IllegalArgumentException - 如果给定的 formats 不是“java.class”或“java.properties”。
  • 方法详情

    • toBundleName

      protected String  toBundleName(String  baseName, Locale  locale)
      返回此提供商提供的给定 baseName locale 的包名称。
      API 注意:
      如果包没有在其他命名模块之间拆分,资源包提供者可以将其资源包打包在与资源包的基本名称相同的包中。如果有多个包提供者提供给定基本名称的资源包,则资源包可以按语言分组或按区域分组打包,以消除拆分包。

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

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

      实现注意事项:
      此方法的默认实现与 ResourceBundle.Control.toBundleName(String, Locale) 的实现相同。
      参数:
      baseName - 资源包的基本名称,一个完全限定的类名
      locale - 应为其加载资源包的locale
      返回:
      资源包的包名称
    • getBundle

      public ResourceBundle  getBundle(String  baseName, Locale  locale)
      为给定的 baseNamelocale 返回一个 ResourceBundle
      指定者:
      getBundle 在接口 ResourceBundleProvider
      实现注意事项:
      该方法的默认实现调用toBundleName 方法获取baseNamelocale的bundle名称,并在本provider的模块中找到本地bundle名称的资源包。它只会搜索构建此提供程序时指定的格式。
      参数:
      baseName - 资源包的基本包名称,一个完全限定的类名。
      locale - 应该为其实例化资源包的locale
      返回:
      给定的 baseNamelocaleResourceBundle,如果没有找到资源包,则为 null
      抛出:
      NullPointerException - 如果 baseNamelocalenull
      UncheckedIOException - 如果在资源包加载期间发生任何 IO 异常