Javaライブラリ(Commons)BeanUtils/PropertyUtils | Hello, Stupid World!

Hello, Stupid World!

いろいろとメモ代わりに書いていきます。

再びCommonsです。
今回もよく使うものを紹介します。

Beanの中身を別Beanにコピーしたい場合、getterで取得しsetterでセットします。
メンバが多ければこの作業が多くなり間違いも増えます。

UserBean user = new UserBean();
MemberBean member = new MemberBean();
member.setId(user.getId());
member.setName(user.getName());
・・・
という感じで

このコピー作業を簡単にしてくれるのがタイトルにあるBeanUtils/PropertyUtilsの
copyPropertiesになります。

こちらからjarファイルをダウンロードしてビルドパスに追加。
http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi

また内部でログ表示の為にcommons-logginを使用しているので
こちらから同様にします。
http://commons.apache.org/proper/commons-logging/download_logging.cgi

使い方は簡単。

PropertyUtils.copyProperties(toBean, fromBean);
BeanUtils.copyProperties(toBean, fromBean);

こんな感じに第二引数に指定したBeanの各メンバの値をを第一引数に
コピーしてくれます。
お互いのBeanで同じ名前のメンバにコピーしますが
名前が異なるメンバは当然コピーしません。
また、内部に同じ型のBeanを持っている場合、そちらもコピーされます。

BeanUtilsは異なる型へも変換してくれます。
intからStringやその逆も可能です。
StringからDateなどの場合は例外が発生しますが。

PropertyUtilsは異なる型へコピーしようとするとIllegalArgumentExceptionが
発生します。

他にもBeanUtils/PropertyUtilsには便利なメソッドがあります。

Beanの中身をMapにコピーしてくれるdescribeや
新しいインスタンスを作ってそこに値をコピーしてくれるcloneBeanなど

BeanUtilsの中ではPropertyUtilsを使っていたりします。
中を見るとリフレクションの勉強に良さそうです。