前回は JavaBeans の定義と java.beans パッケージ内にある幾つかのクラスの使い方を解説しました。
今回は Apache Jakarta プロジェクトで開発されている、 Bean の取り扱いを簡単にするライブラリ commons-beanutils の基本的な使い方を見ていきます*1。 以下に出てくるのは PropertyUtils, BeanUtils, ConvertUtils です。 どれも org.apache.commons.beanutils パッケージ内のクラスで、ユーティリティ・クラス*2です。
ここでは、以下で使うサンプル Bean を定義しておきます(プロパティは name, age の2つ):
public class Person{ private String name; private int age; public String getName(){return this.name;} public void setName(String name){this.name = name;} public int getAge(){return this.age;} public void setAge(int age){this.age = age;} }
PropertyUtils クラス
プロパティの取得・設定
Property とは JavaBeans のプロパティです。 プロパティの取得・設定には、PropertyUtils クラスの static メソッド getProperty(), setProperty() を用います。上記のサンプルを使って、これらの使い方を見てみましょう:
// サンプルの Bean Person person = new Person(); // プロパティをセット PropertyUtils.setProperty(person, "name", "倭マン"); PropertyUtils.setProperty(person, "age", 97); // プロパティの取得 Object name = PropertyUtils.getProperty(person, "name"); Integer age = (Integer)PropertyUtils.getProperty(person, "age");
注意しておく必要があるのは、PropertyUtils#getProperty() メソッドの返り値が Object 型ってことぐらいでしょうか。
ちなみに、PropertyUtils#getPropertyType(Object, String) メソッドによって、プロパティの型を取得することも出来ます。
java.beans パッケージとの関連
PropertyUtils クラスには、java.beans パッケージ内のクラス PropertyDescriptor のインスタンスを取得するメソッドがあります。
メソッドのシグニチャ | 返り値 | 説明 |
---|---|---|
getPropertyDescriptor(Object, String) | PropertyDescriptor | Bean オブジェクトとプロパティ名から PropertyDescriptor を取得します。 |
getPropertyDescriptor(Object) | PropertyDescriptor[] | Bean オブジェクトのプロパティに対する全 PropertyDescriptor を配列として返します。 |
getPropertyDescriptor(Class<?>) | PropertyDescriptor[] | Bean クラスに定義されているプロパティに対する全 PropertyDescriptor を配列として返します。 |
2つの getPropertyDescriptors() メソッドの違いは、引数が Object オブジェクトか Class オブジェクトかです。 Object オブジェクトが引数のメソッドは、そのオブジェクトから Class クラスを取得して、Class クラスが引数のメソッドを呼び出していると思えばよいでしょう:
/* 実際にこういう実装になっているとは限りませんが・・・ */ public static PropertyDescriptor[] getPropertyDescriptors(Object bean){ return getPropertyDescriptors(bean.getClass()); }
BeanUtils クラス
プロパティの取得・設定
BeanUtils クラスでプロパティを扱う際にも、static メソッド getProperty(), setProperty() を用います。 一見 PropertyUtils クラスとの違いが分かりにくいかもしれませんが、根本的な違いはプロパティの値が Object オブジェクトではなく String オブジェクトであることです。
// サンプルの Bean Person person = new Person(); // プロパティをセット BeanUtils.setProperty(person, "name", "倭マン"); BeanUtils.setProperty(person, "age", "97"); // プロパティの値を文字列で渡す // プロパティの取得 String name = BeanUtils.getProperty(person, "name"); String age = BeanUtils.getProperty(person, "age"); // 文字列 "97" が返される
文字列からオブジェクトへの変換
BeanUtils でプロパティの取得・設定をする際には、プロパティ値(Object 型)と文字列(String 型)との間で変換を行う必要があります。 これは ConvertUtils の static メソッドを用いて行われます(たぶん)。 もちろん、ユーザが ConvertUtils の static メソッドを使うことも出来ます。 デフォルトで変換がサポートされているデータ型は
- java.math.BigDecimal
- java.math.BigInteger
- boolean and java.lang.Boolean
- byte and java.lang.Byte
- char and java.lang.Character
- java.lang.Class
- double and java.lang.Double
- float and java.lang.Float
- int and java.lang.Integer
- long and java.lang.Long
- short and java.lang.Short
- java.lang.String
- java.io.File
- java.net.URL
- java.sql.Date
- java.sql.Time
- java.sql.Timestamp
です*3。 実際にどのように文字列へ変換(またはその逆)が行われるかの説明は割愛します。 プリミティブ型は通常の Java コード内のリテラルと同じです(たぶん)。
値を一括して設定する
プロパティのキーと値が java.util.Map
// サンプルの Bean Person person = new Person(); // サンプルの Map Map<String, String> props = new HashMap<String, String>(); props.put(person, "name", "倭マン"); props.put(person, "age", "97"); // プロパティを一括セット BeanUtils.populate(person, props);
Jakarta Commonsクックブック ―Javaプロジェクト必須のレシピ集
- 作者: Timothy M. O'Brien,長瀬嘉秀(監訳),株式会社テクノロジックアート
- 出版社/メーカー: オライリージャパン
- 発売日: 2005/08/20
- メディア: 大型本
- 購入: 2人 クリック: 38回
- この商品を含むブログ (38件) を見る