public abstract static class Resources.ShadowResourceBundle
extends java.util.ResourceBundle
ShadowResourceBundle
is an abstract base class for
ResourceBundle
classes which are backed by a properties file. When
the class is created, it loads a properties file with the same name as the
class.
In the standard scheme (see ResourceBundle
), if
you call
,
it first looks for a class called ResourceBundle.getBundle(java.lang.String)
("foo.MyResource")foo.MyResource
, then
looks for a file called foo/MyResource.properties
. If it finds
the file, it creates a PropertyResourceBundle
and loads the class.
The problem is if you want to load the .properties
file
into a dedicated class; ShadowResourceBundle
helps with this
case.
You should create a class as follows:
Then when you callpackage foo; class MyResource extends ShadowResourceBundle { public MyResource() throws java.io.IOException { } }
ResourceBundle.getBundle("foo.MyResource")
,
it will find the class before the properties file, but still automatically
load the properties file based upon the name of the class.Modifier and Type | Field and Description |
---|---|
private java.util.PropertyResourceBundle |
bundle |
Modifier | Constructor and Description |
---|---|
protected |
ShadowResourceBundle()
Creates a
ShadowResourceBundle , and reads resources from
a .properties file with the same name as the current class. |
Modifier and Type | Method and Description |
---|---|
java.util.Enumeration<java.lang.String> |
getKeys() |
protected java.lang.Object |
handleGetObject(java.lang.String key) |
protected static Resources.ShadowResourceBundle |
instance(java.lang.String baseName,
java.util.Locale locale,
java.util.ResourceBundle bundle)
Returns the instance of the
baseName resource bundle
for the given locale. |
private static java.io.InputStream |
openPropertiesFile(java.lang.Class clazz)
Opens the properties file corresponding to a given class.
|
protected ShadowResourceBundle() throws java.io.IOException
ShadowResourceBundle
, and reads resources from
a .properties
file with the same name as the current class.
For example, if the class is called foo.MyResource_en_US
,
reads from foo/MyResource_en_US.properties
, then
foo/MyResource_en.properties
, then
foo/MyResource.properties
.java.io.IOException
- on errorprivate static java.io.InputStream openPropertiesFile(java.lang.Class clazz)
ResourceBundle
.public java.util.Enumeration<java.lang.String> getKeys()
getKeys
in class java.util.ResourceBundle
protected java.lang.Object handleGetObject(java.lang.String key)
handleGetObject
in class java.util.ResourceBundle
protected static Resources.ShadowResourceBundle instance(java.lang.String baseName, java.util.Locale locale, java.util.ResourceBundle bundle)
baseName
resource bundle
for the given locale.
This method should be called from a derived class, with the proper casting:
class MyResource extends ShadowResourceBundle { ... /** * Retrieves the instance of {@link MyResource} appropriate * to the given locale. **/ public static MyResource instance(Locale locale) { return (MyResource) instance( MyResource.class.getName(), locale, ResourceBundle.getBundle(MyResource.class.getName(), locale)); } ... }
baseName
- Base namelocale
- Localebundle
- Resource bundleCopyright © 2012–2019 The Apache Software Foundation. All rights reserved.