以前このエントリーでも紹介しましたが、BeanUtils、思った以上に使い方が幅広いです。
クラスからクラスに
あるクラスからあるクラスへの値の代入です。
プロパティ名と型が一緒であることが前提ですが、下記の書き方で簡単にあるクラス(beforeClass)からあるクラス(afterClass)へコピーできます。
セッター、ゲッターをごりごり書かなくていいのが助かります。
1 |
BeanUtils.copyProperties(afterClass, beforeClass); |
自分自身の場合はもちろんthisと記述してあげればOKです。
マップからクラスに
それほど頻度は多くないかもしれませんが、あるマップからあるクラスに値を入力したいときですね。
以前のエントリーでも書きましたが、下記のように書きます。
1 |
BeanUtils.populate(class, Map); |
クラスからマップ
クラスからマップも行けます。
私は試していませんが、下記リンクではクラスからMapへの変換がいけるようです。
BeanからBeanへ一括情報コピー。Map←→Beanもできる。BeanUtils
特定の値の取り出し
例えばname、age、delete_flgというプロパティがあり、nameとageのみ取り出したい、あるいはクラスからクラスに特定の値だけコピーしたいケースがあるとします。
通常だとセッター、ゲッターをがりがり書かなくてはいけません。2つぐらいならいいのですが、プロパティの数が増えてくるとセッター、ゲッターの羅列がひどくなってきます。
copyPropertyだと一気に全ての値をコピーしてしまうのですが、下記のようなやり方で特定の値のコピー(or取り出し)もできます。
※この場合はBeanUtilsのなかのPropertyUtilsを使います。
1 2 3 4 |
//取り出す Object tmpVal = PropertyUtils.getProperty(beforeClass, fieldName); //セットする PropertyUtils.setProperty(afterClass, fieldName, tmpVal); |
fieldNameにname、ageと書いてあげればそのままbeforeClassから値を取り出すことができ、値を取り出したり、afterClassに値をセットできます。
BeanUtils.getPropertyでも取得できますが、どうやら値が強制的にStringになってしまうようですね。
PropertyUtilsであればObjectで取り出し、setPropertyでうまいぐあいにキャストしてくれます。
以上、BeanUtilsの簡単かつ頻度が高いだろうと思われる処理について書かせていただきました。これだけでも相当なコーディング量の短縮になりました。
もちろん紹介したのは機能のほんの一例です。下記リンクなどにはさらに詳細な情報が載っています。
リンク
↓非常に詳しいかつ、わかりやすいです。
その他のいろいろな使用例など