[Seasar-user:10909] Re: S2Dxo での配列の取り扱いについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 10月 8日 (月) 01:30:08 JST


小林 (koichik) です.

Date:    Mon, 08 Oct 2007 00:43:03 +0900
From:    "o.h." <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:10908] Re: S2Dxo での配列の取り扱いについて

> それも考えたのですが、その場合個々のフィールドの変換はハードコード
> することになるんですよね.

そこは実装次第でどうにでもやりようがあると思います.

> val1 = (String)map.get("val1");
> 
> みたいな感じに.

今回の場合は

val1 = ((String[]) map.get("val1"))[i];

ですよね.
この i を持ってくる手段が S2Dxo にはないので,
Dxo のメソッドとして実装する方が簡単だと思います.

> #それとも、そもそもそういった方法を使うもんじゃない?

例えば

public abstract class FooDxo {

  public abstract FooBean[] convert(Map[] maps);

  FooBean[] convert(Map src) {
    List list = new ArrayList();
    for (Iterator it = src.entrySet().iterator; it.hasNext(); ) {
      Entry entry = (Entry) it.next();
      String key = (String) entry.getKey();
      Object[] values = (Object[]) entry.getValue();
      for (int i = 0; i < values.length; ++i) {
        Map dest;
        if (i < list.size()) {
          dest = new HashMap();
          list.add(dest);
        } else {
          dest = (Map) list.get(i);
        }
        dest.put(key, values[i]);
      }
    }
    return convert((Map[]) list.toArray(new Map[list.size()]));
  }
}

Map の値が配列になっているのを Map の配列に変換して,
その後 FooBean の配列への変換は抽象メソッド,つまり
S2Dxo のインターセプタに任せるようにしています.
# メーラで直接書いただけなのでコンパイルすら
# 通らないかもしれませんが参考程度ということで.


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