Top / Java / BeanUtils / TIPS集

ある型だけ特殊な処理をさせる

コピーもとの型が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);
  }
}

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();
  }
}

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


この記事は

選択肢 投票
おもしろかった 2  
そうでもない 0  

Top / Java / BeanUtils / TIPS集

現在のアクセス:7332


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-12-11 (金) 16:47:38 (3544d)