[seasar-dev:1219] Re: S2Util
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2010年 8月 30日 (月) 19:30:19 JST
小林 (koichik) です.
> > Date: Sat, 28 Aug 2010 15:18:18 +0900
> > From: Masanobu Shimura <[E-MAIL ADDRESS DELETED]>
> > To: [E-MAIL ADDRESS DELETED]
> > Subject: [seasar-dev:1214] Re: S2Util
> >
> > > org.slim3.utilのBeanUtilの Copyで CopyOptions付きが大変使い易いのですが、
> > > これを S2UTILに取り込む事を検討して頂けませんでしょうか。
Seasar2 の Beans を Slim3 の BeanUtil 風にして
Seasar2 の BeanUtil と統合しました.
というか,元の BeanUtil は跡形なし.
Slim3 では Beans の機能が一部削られているのですが,
S2Util ではそのまま残してます.
また,Slim3 では BeanUtil の copy() メソッドは
copy(Object, Object);
copy(Object, Map);
のようにオーバーロードされていて,Map は
generics になっていない原型が使われています.
原型が使われているのは
copy(Object, Map<String, Object>)
などとすると第 2 引数に Map<String, String> を
指定した場合などに copy(Object, Object) の方が
呼ばれてしまうのに対処しているものと思われます.
おかげで copy(Object, Object) が呼ばれることは
ないのですが,本来は Map<String, String> を
渡したらコンパイルエラーになってほしいわけで,
そこがちょっと悩ましい.
そこで S2Util ではオーバーロードはやめて,
copyBeanToBean(Object, Object);
copyBeanToMap(Object, Map<String, Object>);
のようにしました.
ついでに createAndCopy() 相当は
copyBeanToNewBean(Object, Class<?>);
copyBeanToNewMap(Object);
copyBeanToNewMap(Object, Class<?>);
のようにしました.
ちょっと冗長かなという気もしますが,ひとまず
安全な方にしてみたということで.
間違いがあってもコンパイルエラーにならなくて
いいから短いメソッド名の方がいいなど,
意見があったらお願いします>ALL
また,CopyOptions のインスタンスを生成する
static メソッドを定義した CopyOptionsUtil を
用意したので,これを static import すると
copyBeanToBean(src, dest, excludeNull());
などと書けます.
戻り値は CopyOptions なので,
copyBeanToBean(src, dest, excludeNull().excludeWhitespace());
とチェーンすることが出来ます.
Seasar2 の Beans だとメソッド名は
excludesNull() とかだったのですが,
CopyOptions(Util)? のメソッド名は
Slim3 に合わせて excludeNull() など
's' がなくなっています.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-dev メーリングリストの案内