模块  java.base
软件包  java.util.spi

Class AbstractResourceBundleProvider

  • 实现的所有接口
    ResourceBundleProvider

    public abstract class AbstractResourceBundleProviderextends Objectimplements ResourceBundleProvider
    AbstractResourceBundleProvider是一个抽象类,它为ResourceBundleProvider的提供程序实现类提供基本支持。

    资源包可以打包在一个或多个命名模块, 服务提供者模块中 资源包的使用者是调用ResourceBundle.getBundle(String)的消费者 为了使消费者模块加载由另一个模块提供的资源包“ com.example.app.MyResources ”,它将使用service loader机制。 必须定义名为“ 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");     }     // 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
    另请参见:
    Resource Bundles and Named Modules
    • 构造方法详细信息

      • AbstractResourceBundleProvider

        protected AbstractResourceBundleProvider()
        使用“java.properties”格式构造AbstractResourceBundleProvider 此构造函数等效于AbstractResourceBundleProvider("java.properties")
      • AbstractResourceBundleProvider

        protected AbstractResourceBundleProvider​(String... formats)
        构造一个AbstractResourceBundleProvider具有指定formats getBundle(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)
        返回此提供程序提供的给定 baseNamelocale的包名称。
        API Note:
        如果包未在其他命名模块之间拆分,则资源包提供程序可以将其资源包打包在与资源包的基本名称相同的包中。 如果有多个捆绑提供程序提供给定基本名称的资源包,则可以使用每种语言的分组或按区域分组打包资源包以消除拆分包。

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

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

        Implementation Note:
        此方法的默认实现与 ResourceBundle.Control.toBundleName(String, Locale)的实现相同。
        参数
        baseName - 资源包的基本名称,完全限定的类名
        locale - 应为其加载资源包的语言环境
        结果
        资源包的包名称
      • getBundle

        public ResourceBundle getBundle​(String baseName,                                Locale locale)
        返回 ResourceBundle对于给定的 baseNamelocale
        Specified by:
        getBundle接口 ResourceBundleProvider
        Implementation Note:
        此方法的默认实现调用toBundleName方法以获取baseNamelocale的软件包名称,并在此提供程序的模块中查找软件包名称的资源包本地。 它只会搜索构造此提供程序时指定的格式。
        参数
        baseName - 资源包的基本包名称,完全限定的类名。
        locale - 应为其实例化资源包的语言环境
        结果
        ResourceBundle给定的 baseNamelocale ,或 null如果没有找到资源包
        异常
        NullPointerException - 如果 baseNamelocalenull
        UncheckedIOException - 如果在资源包加载期间发生任何IO异常