JavaTM Platform
Standard Ed. 6

java.util
クラス ResourceBundle

java.lang.Object
  上位を拡張 java.util.ResourceBundle
直系の既知のサブクラス:
ListResourceBundle, PropertyResourceBundle

public abstract class ResourceBundle
extends Object

リソースバンドルには、ロケール固有のオブジェクトが含まれています。プログラムで String などのロケール固有のリソースが必要なときは、ユーザーのロケールに合ったリソースバンドルからロードできます。このように、リソースバンドルから、ロケール固有の情報のすべてでなくてもその大部分を切り離すことで、ユーザーのロケールにはほとんど依存しないプログラムコードを書くことができます。

これにより、以下の特徴を持つプログラムを書くことが可能になります。

リソースバンドルはファミリに属しています。 そのファミリでは、メンバーは共通の基底名を共有していますが、ファミリ名にはロケールを識別する追加コンポーネントも含まれています。たとえば、リソースバンドルのファミリの基底名は「MyResources」です。ファミリは、ファミリと同じ名前 (MyResources) で、特定のロケールがサポートされない場合は、最後の手段のバンドルとして使用される、デフォルトのリソースバントルを持つ必要があります。また、ファミリは、必要なだけの数のロケール固有のメンバーを提供することができます。 たとえば、「MyResources_de」と名付けられたドイツのメンバーなどです。

ファミリの各リソースバンドルには同じ項目がありますが、こうした項目は当該リソースバンドルにより表されるロケールに合わせて翻訳されています。たとえば、「MyResources」と「MyResources_de」の両方に、操作を取り消すためのボタンで使用される String があるとします。その String に、「MyResources」では「Cancel」を格納し、「MyResources_de」では「Abbrechen」を格納することができます。

同じ言語を使用するロケールでも国によってリソースが異なるときは、特殊化が可能です。たとえば、「MyResources_de_CH」には、スイス (CH) 系のドイツ語 (de) のオブジェクトが含まれています。リソースの一部だけを修正することもできます。

プログラムでロケール固有のオブジェクトが必要なときは、getBundle メソッドを使用して、ResourceBundle クラスを次のようにロードします。

 ResourceBundle myResources =
      ResourceBundle.getBundle("MyResources", currentLocale);
 

リソースバンドルは、キーと値のペアになっています。キーは、バンドルのロケール固有のオブジェクトを一意に識別します。キーと値の 2 つのペアが含まれている ListResourceBundle の例を示します。

 public class MyResources extends ListResourceBundle {
     protected Object[][] getContents() {
         return new Object[][] {
             // LOCALIZE THE SECOND STRING OF EACH ARRAY (e.g., "OK")
             {"OkKey", "OK"},
             {"CancelKey", "Cancel"},
             // END OF MATERIAL TO LOCALIZE
        };
     }
 }
 
キーは常に String です。 この例では、キーは「OkKey」と「CancelKey」です。前述した例では、値 「OK」と「Cancel」も String ですが、必ずしもそうである必要はありません。値は、どの型のオブジェクトでも可能です。

リソースバンドルから適切な getter メソッドを使用してオブジェクトを検索します。「OkKey」と「CancelKey」はどちらも文字列なので、検索には getString を使用します。

 button1 = new Button(myResources.getString("OkKey"));
 button2 = new Button(myResources.getString("CancelKey"));
 
getter メソッドは、すべて引数としてキーを要求し、検出したオブジェクトを返します。オブジェクトが見つからない場合、getter メソッドは MissingResourceException をスローします。

getString 以外に、ResourceBundle では、文字列配列を取得する getStringArray メソッドも提供します。 同様に、ほかの型のオブジェクトを取得する総称 getObject メソッドも提供します。getObject を使用する場合、結果を適切な型にキャストする必要があります。次に例を示します。

 int[] myIntegers = (int[]) myResources.getObject("intList");
 

Java プラットフォームでは、ResourceBundle の 2 つのサブクラス ListResourceBundle および PropertyResourceBundle が用意されています。 これらはリソースを作成するかなり簡単な方法を提供します。前の例で簡単に示したように、ListResourceBundle は、そのリソースをキーと値のペアのリストとして管理します。PropertyResourceBundle は、プロパティーファイルを使用してそのリソースを管理します。

ListResourceBundle または PropertyResourceBundle では不十分なときは、独自の ResourceBundle サブクラスを書くことができます。サブクラスでオーバーライドしなければいけないメソッドは 2 つあります。handleGetObjectgetKeys() です。

ResourceBundle.Control

ResourceBundle.Control クラスは、ResourceBundle.Control インスタンスを取る getBundle ファクトリメソッドがバンドルロード処理を実行する際に必要とする情報を提供します。ユーザー独自のサブクラスを実装すれば、標準以外のリソースバンドル形式を利用できるようにしたり、検索手順を変更したり、キャッシュパラメータを定義したりできます。詳細については、そのクラスと getBundle ファクトリメソッドの説明を参照してください。

キャッシュ管理

getBundle ファクトリメソッドによって作成されたリソースバンドルインスタンスはデフォルトで、キャッシュに格納されます。ファクトリメソッドは、目的のリソースバンドルインスタンスがキャッシュに格納されていれば、その同じインスタンスを複数回返します。getBundle クライアントは、キャッシュをクリアーしたり、有効期間の値を使ってキャッシュ内のリソースバンドルインスタンスの寿命を管理したり、リソースバンドルインスタンスをキャッシュしないように指定したりできます。詳細については、getBundle ファクトリメソッドclearCacheResourceBundle.Control.getTimeToLive、および ResourceBundle.Control.needsReload の説明を参照してください。

次にあるのは ResourceBundle のサブクラス MyResources の非常に簡単な例です。 このサブクラスは 2 つのリソースを管理します (サブクラスが多数のリソースを管理する場合は、Map を使用する)。「親レベル」の ResourceBundle が、(下記の okKey のように) 同じ値を持つ同じキーを扱う場合は、値を提供する必要はありません。
 // default (English language, United States)
 public class MyResources extends ResourceBundle {
     public Object handleGetObject(String key) {
         if (key.equals("okKey")) return "Ok";
         if (key.equals("cancelKey")) return "Cancel";
         return null;
     }
 
     public Enumeration<String> getKeys() {
         return Collections.enumeration(keySet());
     }
 
     // Overrides handleKeySet() so that the getKeys() implementation
     // can rely on the keySet() value.
     protected Set<String> handleKeySet() {
         return new HashSet<String>(Arrays.asList("okKey", "cancelKey"));
     }
 }

 // German language
 public class MyResources_de extends MyResources {
     public Object handleGetObject(String key) {
         // don't need okKey, since parent level handles it.
         if (key.equals("cancelKey")) return "Abbrechen";
         return null;
     }
 
     protected Set<String> handleKeySet() {
         return new HashSet<String>(Arrays.asList("cancelKey"));
     }
 }
 
ResourceBundle のシングルファミリの使用を制限する必要はありません。たとえば、例外メッセージ ExceptionResources (ExceptionResources_frExceptionResources_de など) で 1 つのリソース、ウィジェット WidgetResource (WidgetResources_frWidgetResources_de など) で 1 つのリソースというように、好きなようにリソースを分割してバンドルのセットを持つこともできます。

導入されたバージョン:
JDK1.1
関連項目:
ListResourceBundle, PropertyResourceBundle, MissingResourceException

入れ子のクラスの概要
static class ResourceBundle.Control
          ResourceBundle.Control は、バンドルロード処理中に ResourceBundle.getBundle ファクトリメソッドによって呼び出される一連のコールバックメソッドを定義します。
 
フィールドの概要
protected  ResourceBundle parent
          このバンドルの親バンドル。
 
コンストラクタの概要
ResourceBundle()
          唯一のコンストラクタです。
 
メソッドの概要
static void clearCache()
          呼び出し元のクラスローダーを使ってロードされたリソースバンドルのすべてを、キャッシュから削除します。
static void clearCache(ClassLoader loader)
          指定されたクラスローダーを使ってロードされたリソースバンドルのすべてを、キャッシュから削除します。
 boolean containsKey(String key)
          指定された key がこの ResourceBundle またはその親バンドル内に含まれるかどうかを判定します。
static ResourceBundle getBundle(String baseName)
          指定された基底名、デフォルトのロケール、および呼び出し側のクラスローダーを使用して、リソースバンドルを取得します。
static ResourceBundle getBundle(String baseName, Locale locale)
          指定された基底名、ロケール、および呼び出し側のクラスローダーを使用して、リソースバンドルを取得します。
static ResourceBundle getBundle(String baseName, Locale locale, ClassLoader loader)
          指定された基底名、ロケール、クラスローダーを使用して、リソースバンドルを取得します。
static ResourceBundle getBundle(String baseName, Locale targetLocale, ClassLoader loader, ResourceBundle.Control control)
          指定された基底名、ターゲットロケール、クラスローダー、およびコントロールを使用して、リソースバンドルを返します。
static ResourceBundle getBundle(String baseName, Locale targetLocale, ResourceBundle.Control control)
          指定された基底名、ターゲットロケール、コントロール、および呼び出し側のクラスローダーを使用して、リソースバンドルを返します。
static ResourceBundle getBundle(String baseName, ResourceBundle.Control control)
          指定された基底名、デフォルトのロケール、および指定されたコントロールに基づいて、リソースバンドルを返します。
abstract  Enumeration<String> getKeys()
          キーのリストを返します。
 Locale getLocale()
          リソースバンドルの Locale を返します。
 Object getObject(String key)
          このリソースバンドルまたはその親リソースバンドルのいずれかから指定されたキーのオブジェクトを取得します。
 String getString(String key)
          このリソースバンドルまたはその親リソースバンドルのいずれかから指定されたキーの文字列を取得します。
 String[] getStringArray(String key)
          このリソースバンドルまたはその親リソースバンドルのいずれかから指定されたキーの文字列配列を取得します。
protected abstract  Object handleGetObject(String key)
          このリソースバンドルから指定されたキーのオブジェクトを取得します。
protected  Set<String> handleKeySet()
          この ResourceBundle だけに格納されているキーの Set を返します。
 Set<String> keySet()
          この ResourceBundle とその親バンドル内に含まれるすべてのキーの Set を返します。
protected  void setParent(ResourceBundle parent)
          このバンドルの親バンドルを設定します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

parent

protected ResourceBundle parent
このバンドルの親バンドル。親バンドルは、このバンドルに特定のリソースが含まれていないときに getObject によって参照されます。

コンストラクタの詳細

ResourceBundle

public ResourceBundle()
唯一のコンストラクタです。サブクラスのコンストラクタによる呼び出し用で、通常は暗黙的に呼び出されます。

メソッドの詳細

getString

public final String getString(String key)
このリソースバンドルまたはその親リソースバンドルのいずれかから指定されたキーの文字列を取得します。このメソッドを呼び出すことは、次を呼び出すことと同じです。
(String) getObject(key).

パラメータ:
key - 望ましい文字列のキー
戻り値:
指定されたキーの文字列
例外:
NullPointerException - keynull の場合
MissingResourceException - 指定されたキーのオブジェクトが見つからない場合
ClassCastException - 指定されたキーの見つかったオブジェクトが文字列でない場合

getStringArray

public final String[] getStringArray(String key)
このリソースバンドルまたはその親リソースバンドルのいずれかから指定されたキーの文字列配列を取得します。このメソッドを呼び出すことは、次を呼び出すことと同じです。
(String[]) getObject(key).

パラメータ:
key - 望ましい文字列配列のキー
戻り値:
指定されたキーの文字列配列
例外:
NullPointerException - keynull の場合
MissingResourceException - 指定されたキーのオブジェクトが見つからない場合
ClassCastException - 指定されたキーの見つかったオブジェクトが文字列配列でない場合

getObject

public final Object getObject(String key)
このリソースバンドルまたはその親リソースバンドルのいずれかから指定されたキーのオブジェクトを取得します。このメソッドは、最初に handleGetObject を使用して、このリソースバンドルからオブジェクトを取得しようとします。オブジェクトを取得できず、親リソースバンドルが null でない場合、親の getObject メソッドを呼び出します。それでも取得できない場合は、MissingResourceException をスローします。

パラメータ:
key - 望ましいオブジェクトのキー
戻り値:
指定されたキーのオブジェクト
例外:
NullPointerException - keynull の場合
MissingResourceException - 指定されたキーのオブジェクトが見つからない場合

getLocale

public Locale getLocale()
リソースバンドルの Locale を返します。このメソッドは、返されたリソースバンドルが本当に要求されたロケールに対応しているか、またはフォールバックであるかを判定するために、getBundle() を呼び出したあとで使用できます。

戻り値:
このリソースバンドルのロケール

setParent

protected void setParent(ResourceBundle parent)
このバンドルの親バンドルを設定します。親バンドルは、このバンドルに特定のリソースが含まれていないときに getObject によって参照されます。

パラメータ:
parent - このバンドルの親バンドル

getBundle

public static final ResourceBundle getBundle(String baseName)
指定された基底名、デフォルトのロケール、および呼び出し側のクラスローダーを使用して、リソースバンドルを取得します。このメソッドを呼び出すことは、次を呼び出すことと同じです。
getBundle(baseName, Locale.getDefault(), this.getClass().getClassLoader()),
getClassLoader() が、ResourceBundle のセキュリティー特権により実行されることだけが異なります。検索とインスタンス生成方法の詳細については、getBundle を参照してください。

パラメータ:
baseName - リソースバンドルの基底名。完全指定クラス名
戻り値:
指定された基底名とデフォルトのロケールのリソースバンドル
例外:
NullPointerException - baseNamenull の場合
MissingResourceException - 指定された基底名のリソースバンドルが見つからない場合

getBundle

public static final ResourceBundle getBundle(String baseName,
                                             ResourceBundle.Control control)
指定された基底名、デフォルトのロケール、および指定されたコントロールに基づいて、リソースバンドルを返します。このメソッドを呼び出すことは、次を呼び出すことと同じです。
getBundle(baseName, Locale.getDefault(),
this.getClass().getClassLoader(), control),
 
getClassLoader() が、ResourceBundle のセキュリティー特権により実行されることだけが異なります。ResourceBundle.Control を使用したリソースバンドルロード処理の完全な説明については、getBundle を参照してください。

パラメータ:
baseName - リソースバンドルの基底名。完全指定クラス名
control - リソースバンドルロード処理のための情報を提供するコントロール
戻り値:
指定された基底名とデフォルトのロケールのリソースバンドル
例外:
NullPointerException - baseName または controlnull の場合
MissingResourceException - 指定された基底名のリソースバンドルが見つからない場合
IllegalArgumentException - 指定された control が正しく実行されない場合 (たとえば、control.getCandidateLocales が null を返すなど。)control の検証が必要に応じて実行されることに注意
導入されたバージョン:
1.6

getBundle

public static final ResourceBundle getBundle(String baseName,
                                             Locale locale)
指定された基底名、ロケール、および呼び出し側のクラスローダーを使用して、リソースバンドルを取得します。このメソッドを呼び出すことは、次を呼び出すことと同じです。
getBundle(baseName, locale, this.getClass().getClassLoader()),
getClassLoader() が、ResourceBundle のセキュリティー特権により実行されることだけが異なります。検索とインスタンス生成方法の詳細については、getBundle を参照してください。

パラメータ:
baseName - リソースバンドルの基底名。完全指定クラス名
locale - リソースバンドルが必要なロケール
戻り値:
指定された基底名とロケールのリソースバンドル
例外:
NullPointerException - baseName または localenull の場合
MissingResourceException - 指定された基底名のリソースバンドルが見つからない場合

getBundle

public static final ResourceBundle getBundle(String baseName,
                                             Locale targetLocale,
                                             ResourceBundle.Control control)
指定された基底名、ターゲットロケール、コントロール、および呼び出し側のクラスローダーを使用して、リソースバンドルを返します。このメソッドを呼び出すことは、次を呼び出すことと同じです。
getBundle(baseName, targetLocale, this.getClass().getClassLoader(),
control),
 
getClassLoader() が、ResourceBundle のセキュリティー特権により実行されることだけが異なります。ResourceBundle.Control を使用したリソースバンドルロード処理の完全な説明については、getBundle を参照してください。

パラメータ:
baseName - リソースバンドルの基底名。完全指定クラス名
targetLocale - リソースバンドルが必要なロケール
control - リソースバンドルロード処理のための情報を提供するコントロール
戻り値:
指定された基底名と locales 内のある Locale に対するリソースバンドル
例外:
NullPointerException - baseNamelocales、または controlnull の場合
MissingResourceException - locales 内のどのロケールにおいても指定された基底名のリソースバンドルが見つからない場合
IllegalArgumentException - 指定された control が正しく実行されない場合 (たとえば、control.getCandidateLocales が null を返すなど。)control の検証が必要に応じて実行されることに注意
導入されたバージョン:
1.6

getBundle

public static ResourceBundle getBundle(String baseName,
                                       Locale locale,
                                       ClassLoader loader)
指定された基底名、ロケール、クラスローダーを使用して、リソースバンドルを取得します。

理論的には、getBundle では次の方法を使用して、リソースバンドルの検出および生成を行います。  

getBundle は、基底名、指定されたロケール、およびデフォルトのロケール (Locale.getDefault から取得したロケール) を使用して、「候補のバンドル名」のシーケンスを生成します。指定されたロケールの言語、国、およびバリアントがすべて空の文字列の場合、基底名は候補のバンドル名のみになります。それ以外の場合には、指定したロケール (language1、country1、variant1) およびデフォルトのロケール (language2、country2、variant2) の属性値から、次のシーケンスが生成されます。

最終コンポーネントが空の文字列の場合、候補のバンドル名は省略されます。たとえば、country1 が空の文字列の場合、2 番目の候補のバンドル名は省略されます。

getBundle は実際のリソースバンドルを「インスタンス化」できる最初の名前を見つけるために、候補のバンドル名を繰り返し処理します。各候補バンドル名ごとに、リソースバンドルを次のように作成しようとします。

結果リソースバンドルが見つからない場合、MissingResourceException がスローされます。

結果リソースバンドルが見つかったときは、その親連鎖をインスタンス化します。getBundle は候補のバンドル名を繰り返し処理します。 このバンドル名は、結果リソースバンドルのバンドル名からバリアント、国、および言語を (前に「_」についたものに関して毎回) 連続して削除することによって取得します。前述したように、最終コンポーネントが空の文字列である場合、候補のバンドル名は省略されます。各候補のバンドル名により、前述したように、リソースバンドルをインスタンス化しようとします。前にインスタンス化したリソースバンドルに null 以外の親リソースバンドルがないかぎり、インスタンスに成功した場合は常に、前にインスタンス化したリソースバンドルの setParent メソッドを新しいリソースバンドルにより呼び出します。

getBundle は、インスタンス化したリソースバンドルをキャッシュし、同じリソースバンドルのインスタンスを複数回返す可能性があります。

baseName 引数は完全指定されたクラス名である必要があります。ただし、前バージョンとの互換性に関しては、Sun の Java SE ランタイム環境はそのことを検証しません。 そのため、完全指定されたクラス名 (「.」を使用) の代わりにパス名 (「/」を使用) を指定して、PropertyResourceBundle にアクセスできるようになります。

例:
次のクラスとプロパティーファイルが提供されています。

MyResources.class
MyResources.properties
MyResources_fr.properties
MyResources_fr_CH.class
MyResources_fr_CH.properties
MyResources_en.properties
MyResources_es_ES.class
 
すべてのファイルの内容が有効です (つまり、「.class」ファイルは ResourceBundle の public 非抽象サブクラスを含んでおり、「.properties」ファイルは構文的に正しい)。デフォルトのロケールは Locale("en", "GB") です。  

表示されたロケール引数値を持つ getBundle の呼び出しは、次のソースからリソースバンドルをインスタンス化します。

  • Locale("fr", "CH"):result MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class
  • Locale("fr", "FR"):result MyResources_fr.properties, parent MyResources.class
  • Locale("de", "DE"):result MyResources_en.properties, parent MyResources.class
  • Locale("en", "US"):result MyResources_en.properties, parent MyResources.class
  • Locale("es", "ES"):result MyResources_es_ES.class, parent MyResources.class

ファイル MyResources_fr_CH.properties が使用されることは決してありません。なぜなら、このファイルは MyResources_fr_CH.class によって隠蔽されるからです。同様に、MyResources.properties も MyResources.class によって隠蔽されます。

パラメータ:
baseName - リソースバンドルの基底名。完全指定クラス名
locale - リソースバンドルが必要なロケール
loader - リソースバンドルのロード元のクラスローダ
戻り値:
指定された基底名とロケールのリソースバンドル
例外:
NullPointerException - baseNamelocale またはloadernull の場合
MissingResourceException - 指定された基底名のリソースバンドルが見つからない場合
導入されたバージョン:
1.2

getBundle

public static ResourceBundle getBundle(String baseName,
                                       Locale targetLocale,
                                       ClassLoader loader,
                                       ResourceBundle.Control control)
指定された基底名、ターゲットロケール、クラスローダー、およびコントロールを使用して、リソースバンドルを返します。control 引数のない getBundle ファクトリメソッド とは異なり、指定された control によって、リソースバンドルを検索およびインスタンス化する方法が決まります。基本的に、control が指定された場合のバンドルロード処理の実行手順は、次のようになります。

  1. このファクトリメソッドは、指定された baseNametargetLocale、および loader に対するリソースバンドルを、キャッシュ内で検索します。要求されたリソースバンドルのインスタンスがキャッシュ内で見つかり、そのインスタンスとすべての親インスタンスの有効期間がまだ過ぎていない場合には、そのインスタンスが呼び出し元に返されます。それ以外の場合、このファクトリメソッドは以下のロード処理へと進みます。
  2. バンドル名またはリソース名を生成する目的で、control.getFormats メソッドが呼び出され、リソースバンドル形式が取得されます。文字列「java.class」「java.properties」はそれぞれ、クラスベースのリソースバンドルと プロパティー ベースのリソースバンドルを表します。「java.」で始まるその他の文字列は、将来の拡張用として予約されているため、アプリケーション定義形式では使用しないでください。その他の文字列は、アプリケーション定義形式を表します。
  3. control.getCandidateLocales メソッドがターゲットロケールを指定して呼び出され、リソースバンドルの検索に使用される「候補ロケール」のリストが取得されます。
  4. control.newBundle メソッドが呼び出され、この基底バンドル名、ある候補ロケール、およびある形式に対する ResourceBundle がインスタンス化されます。(後述のキャッシュ検索に関する注を参照。)この手順は候補ロケールと形式のすべての組み合わせについて繰り返され、newBundle メソッドが ResourceBundle インスタンスを返すかすべての組み合わせが使用された時点で終了します。たとえば、候補ロケールが Locale("de", "DE")Locale("de")、および Locale("") であり、形式が「java.class」「java.properties」であった場合、control.newBundle の呼び出し時に使用すべきロケールと形式の組み合わせのシーケンスは、次のようになります。
    ロケール
    形式
    Locale("de", "DE")
    java.class
    Locale("de", "DE") java.properties
    Locale("de") java.class
    Locale("de") java.properties
    Locale("")
    java.class
    Locale("") java.properties
  5. 1 つ前の手順でリソースバンドルが 1 つも見つからなかった場合は、手順 6 に進みます。見つかったバンドルが基底バンドル (Locale("") に対するバンドル) であり、候補ロケールリストに Locale("") しか含まれていなかった場合には、そのバンドルを呼び出し元に返します。見つかったバンドルが基底バンドルであるが、候補ロケールリストに Locale("") 以外のロケールが含まれていた場合には、そのバンドルを保留して手順 6 に進みます。見つかったバンドルが基底バンドルでない場合は、手順 7 に進みます。
  6. リソースバンドルのさらなる検索を試みるために、control.getFallbackLocale メソッドが呼び出され、フォールバックロケール (現在のターゲットロケールの代替となるロケール) が取得されます。このメソッドが null 以外のロケールを返した場合、それが次のターゲットロケールとなり、手順 3 からロード処理が開始されます。それ以外の場合、1 つ前の手順 5 で基底バンドルが見つかり、それを保留していた場合には、その基底バンドルがこの時点で呼び出し元に返されます。それ以外の場合は、MissingResourceException がスローされます。
  7. この時点で、基底バンドル以外のリソースバンドルが見つかっています。このバンドルが自身の初期化中に親を設定した場合には、このバンドルが呼び出し元に返されます。それ以外の場合、その検索に使用された候補ロケールリストに基づいて、その親連鎖がインスタンス化されます。最後に、そのバンドルが呼び出し元に返されます。

上記のリソースバンドルロード処理の間、このファクトリメソッドは、control.newBundle メソッドを呼び出す前にキャッシュを検索します。キャッシュ内で見つかったリソースバンドルの有効期間が過ぎていた場合、ファクトリメソッドは control.needsReload メソッドを呼び出し、そのリソースバンドルを再ロードする必要があるかどうかを判定します。再ロードが必要な場合、ファクトリメソッドは control.newBundle を呼び出してリソースバンドルを再ロードします。control.newBundlenull を返した場合、ファクトリメソッドは、存在しないリソースバンドルの目印として、ダミーのリソースバンドルをキャッシュ内に格納します。これにより、後続の要求に対する検索オーバーヘッドを回避できます。そのようなダミーのリソースバンドルは、control で指定されたのと同じの有効期限制御下に入ります。

デフォルトでは、ロードされたリソースバンドルのすべてがキャッシュに格納されます。詳細については、control.getTimeToLive を参照してください。

デフォルトの ResourceBundle.Control 実装を使用したバンドルロード処理の例を、次に示します。

条件:

まず、getBundle は、次の順番でリソースバンドルのロードを試みます。

この時点で、getBundlefoo/bar/Messages.properties を見つけますが、それを保留します。なぜなら、それは基底バンドルだからです。getBundlecontrol.getFallbackLocale("foo.bar.Messages", Locale.ITALY) を呼び出します。すると、Locale.FRENCH が返されます。次に、getBundle は次の順番でバンドルのロードを試みます。

getBundlefoo/bar/Messages_fr.properties を見つけ、ResourceBundle インスタンスを作成します。次に、getBundle は候補ロケールのリストに基づいて、その親連鎖を設定します。リスト内で見つかるのは foo/bar/Messages.properties だけです。getBundle は、foo/bar/Messages_fr.properties に対するインスタンスの親になる ResourceBundle インスタンスを作成します。

パラメータ:
baseName - リソースバンドルの基底名。完全指定クラス名
targetLocale - リソースバンドルが必要なロケール
loader - リソースバンドルのロード元のクラスローダ
control - リソースバンドルロード処理のための情報を提供するコントロール
戻り値:
指定された基底名とロケールのリソースバンドル
例外:
NullPointerException - baseNametargetLocaleloader、または controlnull の場合
MissingResourceException - 指定された基底名のリソースバンドルが見つからない場合
IllegalArgumentException - 指定された control が正しく実行されない場合 (たとえば、control.getCandidateLocales が null を返すなど。)control の検証が必要に応じて実行されることに注意
導入されたバージョン:
1.6

clearCache

public static final void clearCache()
呼び出し元のクラスローダーを使ってロードされたリソースバンドルのすべてを、キャッシュから削除します。

導入されたバージョン:
1.6
関連項目:
ResourceBundle.Control.getTimeToLive(String,Locale)

clearCache

public static final void clearCache(ClassLoader loader)
指定されたクラスローダーを使ってロードされたリソースバンドルのすべてを、キャッシュから削除します。

パラメータ:
loader - クラスローダー
例外:
NullPointerException - loader が null の場合
導入されたバージョン:
1.6
関連項目:
ResourceBundle.Control.getTimeToLive(String,Locale)

handleGetObject

protected abstract Object handleGetObject(String key)
このリソースバンドルから指定されたキーのオブジェクトを取得します。このリソースバンドルが、指定されたキーのオブジェクトを含まない場合は、null を返します。

パラメータ:
key - 望ましいオブジェクトのキー
戻り値:
指定されたキーのオブジェクト、または null
例外:
NullPointerException - keynull の場合

getKeys

public abstract Enumeration<String> getKeys()
キーのリストを返します。

戻り値:
この ResourceBundle とその親バンドル内に含まれるキーの Enumeration

containsKey

public boolean containsKey(String key)
指定された key がこの ResourceBundle またはその親バンドル内に含まれるかどうかを判定します。

パラメータ:
key - リソースの key
戻り値:
指定された key がこの ResourceBundle またはその親バンドル内に含まれる場合は true、それ以外の場合は false
例外:
NullPointerException - keynull の場合
導入されたバージョン:
1.6

keySet

public Set<String> keySet()
この ResourceBundle とその親バンドル内に含まれるすべてのキーの Set を返します。

戻り値:
この ResourceBundle とその親バンドル内に含まれるすべてのキーの Set
導入されたバージョン:
1.6

handleKeySet

protected Set<String> handleKeySet()
この ResourceBundle だけに格納されているキーの Set を返します。

デフォルト実装は、getKeys メソッドから返されるキーの Set を返します。ただし、handleGetObject メソッドが null を返すようなキーは除外されます。Set が作成されると、その値がこの ResourceBundle 内に保存されます。これにより、次の呼び出し時に同じ Set が生成されるのを防ぐことができます。処理の高速化を図るには、サブクラス実装内でこのメソッドをオーバーライドしてください。

戻り値:
この ResourceBundle だけに格納されているキーの Set
導入されたバージョン:
1.6

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。