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