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