// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents

**ある型だけ特殊な処理をさせる [#o9b2c220]
コピーもとの型がjava.util.Dateだったとして、コピー先の型が単なるStringだって場合などはよくありそうですが、その場合には下記のConverterの機能で対応することができます。たとえば、
 public class SrcBean2 {
   private Date date;
   //Getter/Setterは省略
 }

 public class DestBean2 {
   private String date;
   //Getter/Setterは省略
   @Override
   public String toString() {
     return new ToStringBuilder(this).append("date", date).toString();
   }
 }
こんな場合ですね。

やり方は以下の通り。
 public class Main2 {
   public static void main(String[] args) throws IllegalAccessException,
       InvocationTargetException, NoSuchMethodException {
     SrcBean2 src = new SrcBean2();
     src.setDate(new Date());
 
     DestBean2 dest = new DestBean2();
     ConvertUtilsBean convertUtilsBean = new ConvertUtilsBean();
     convertUtilsBean.deregister(String.class);
     convertUtilsBean.register(new MyStringConverter(), String.class);
     // DestがStringの時に呼ばれる処理。
     BeanUtilsBean beanUtilsBean = new BeanUtilsBean(convertUtilsBean,
         new PropertyUtilsBean());
 
     beanUtilsBean.copyProperties(dest, src);
     System.out.println(dest);
   }
 }
 
 public Object convert(Class type, Object value) {
   if (value instanceof Date) {
     SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd");
     return sdf1.format(value);
 class MyStringConverter implements Converter {
   public Object convert(Class type, Object value) {
     if (value instanceof Date) {
       SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd");
       return sdf1.format(value);
     }
     return value.toString();
   }
   return value.toString();
 }

こんな感じで、コピー先がStringだった場合はこうしろっていうConverterクラスを自分で作成して、登録する事ができます。

----
この記事は
#vote(おもしろかった,そうでもない)

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS