Javaのリソースデータ (3)
今回は、リソースバンドルの概要について書きます。自分用の覚え書きということもあり、あまりまとまっていません。
前回: id:simply-k:20100719:1279499319
次回: id:simply-k:20100724:1279945345
目次: id:simply-k:20100728:1280299110
リソースバンドルの概要
使い道
リソースデータをロケールごとに切り替える場合に使う。
関連クラス
ResourceBundleクラス
- 抽象クラス
- staticメソッドのResourceBundle#getBundle()を呼び出すと、サブクラスのインスタンスが返される。
- 取得したサブクラスのインスタンスには、キーと値の組が格納されている。
- サブクラス一覧
- PropertyResourceBundleクラス
- ListResourceBundleクラス
- その他のクラス (自前のクラス)
- ResourceBundle#getBundle()は、複数のメソッドがオーバーロードされている。
- ResourceBundle#getBundle()の引数
- リソースバンドルの基底名 (必須)
- Locale指定 (省略可)
- ClassLoader指定 (省略可)
- ResourceBundle.Control指定 (省略可)
ResourceBundle#getBundle()の使用例
//「jp.co.foo」パッケージの「resource」を基底名として指定する。 //デフォルトのロケールを使用する。 ResourceBundle rb1 = ResourceBundle.getBundle("jp.co.foo.resource"); //ロケールにja_JPを指定する。 ResourceBundle rb2 = ResourceBundle.getBundle("jp.co.foo.resource", Locale.JAPAN); //ロケールにja_JPを指定し、プロパティーベースのリソースのみを検索する。(Java 6以降) ResourceBundle rb3 = ResourceBundle.getBundle("jp.co.foo.resource", Locale.JAPAN, ResourceBundle.Control.getControl(FORMAT_PROPERTIES));
リソース名(基底名)の指定方法
リソースの決定方法
補足
PropertyResourceBundleクラス
ListResourceBundleクラス
- キー(String)と値(Object)の組を保持する。(HashMap
に似ている) - 抽象クラスなので、サブクラスを作成する必要がある。
- ListResourceBundle#getContents()をオーバーライドして、キーと値の組を返すようにする。
- PropertyResourceBundleクラスと違い、String以外の値を扱うことができる。
ResourceBundle.Controlクラス
- ResourceBundle#getBundle()の動作を制御する。
- staticメソッドのResourceBundle.Control#getControl()により、インスタンスを生成する。
- リソースの種類(クラス、プロパティファイル)を制限できる。
- サブクラスを作ることにより、詳細な制御が可能となる。
前回: id:simply-k:20100719:1279499319
次回: id:simply-k:20100724:1279945345
目次: id:simply-k:20100728:1280299110
*1:http://java.sun.com/javase/ja/6/docs/ja/api/java/util/ResourceBundle.html#getBundle%28java.lang.String,%20java.util.Locale,%20java.lang.ClassLoader,%20java.util.ResourceBundle.Control%29
*2:XML形式のプロパティファイルを扱いたい場合は、ResourceBundleクラスとResourceBundle.Controlクラスのサブクラスを作る必要があります。