[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 メーリングリストの案内