[Seasar-user:8658] Re: [S2Dao] Bean のプロパティに基本型以外を使う方法
Yasuo Higa
[E-MAIL ADDRESS DELETED]
2007年 6月 25日 (月) 19:09:48 JST
ひがです。
> なかたです。
>
> org.seasar.framework.beans.impl.PropertyDescImpl クラスを改造
> してみました。
> これで、Enum クラスに対応でき、また、DBに格納したデータが
> String 以外の場合にも、その型に適合した
> static valueOf メソッドを用意しておくとそのインスタンスを生成して
> 設定します。
> #実行効率を無視して組んだので、遅いと思いますが。
>
ありがとうございます。
ただ、実際のコミットしたコードは、効率も重視し
valueOf(String)だけにメソッドを絞り、最初にキャッシュするように
なっています。
よろしくお願いします。
> public Object convertIfNeed(Object arg) {
> if (propertyType.isPrimitive()) {
> return convertPrimitiveWrapper(arg);
> } else if (Number.class.isAssignableFrom(propertyType)) {
> return convertNumber(arg);
> } else if (java.util.Date.class.isAssignableFrom(propertyType)) {
> return convertDate(arg);
> } else if (Boolean.class.isAssignableFrom(propertyType)) {
> return BooleanConversionUtil.toBoolean(arg);
> } else if (arg instanceof String && !String.class.equals(propertyType))
{
> if (stringConstructor != null) {
> return convertWithStringConstructor(arg);
> } else {
> Method[] methods = propertyType.getMethods();
> for (int i = 0; i < methods.length; i++) {
> if (methods[i].getName().equals("valueOf")) {
> if ((methods[i].getModifiers() & Modifier.STATIC) != 0) {
> if (methods[i].getReturnType().equals(propertyType)) {
> Class[] parameterTypes = methods[i].getParameterTypes();
> if (parameterTypes.length == 1
> && parameterTypes[0].isAssignableFrom(arg.getClass())) {
> // 第二引数に意味はない
> return MethodUtil.invoke(methods[i], propertyType,
> new Object[]{arg});
> }
> }
> }
> }
> }
> return arg;
> }
> } else if (java.util.Calendar.class.isAssignableFrom(propertyType)) {
> return CalendarConversionUtil.toCalendar(arg);
> } else {
> Method[] methods = propertyType.getMethods();
> for (int i = 0; i < methods.length; i++) {
> if (methods[i].getName().equals("valueOf")) {
> if ((methods[i].getModifiers() & Modifier.STATIC) != 0) {
> if (methods[i].getReturnType().equals(propertyType)) {
> Class[] parameterTypes = methods[i].getParameterTypes();
> if (parameterTypes.length == 1
> && parameterTypes[0].isAssignableFrom(arg.getClass())) {
> // 第二引数に意味はない
> return MethodUtil.invoke(methods[i], propertyType, new
> Object[]{arg});
> }
> }
> }
> }
> }
> }
> return arg;
> }
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
--
Yasuo Higa
[E-MAIL ADDRESS DELETED]
Seasar-user メーリングリストの案内