4

私は4つのクラスを持っています:

public class A { }
public class B extends A { }
public class C extends B { }
public class D extends B { }

継承に関するドーザーのドキュメントで読んだことから、それは非常に簡単であるに違いありません。スーパークラスを相互にマップする必要があり、サブクラスにも同様にマップする必要があります。xml での表示方法は次のとおりです。

<mapping>
<class-a>foo.A</class-a>
<class-b>foo.bar.A</class-b>
</mapping>

<mapping>
<class-a>foo.B</class-a>
<class-b>foo.bar.B</class-b>
</mapping>

<mapping>
<class-a>foo.C</class-a>
<class-b>foo.bar.C</class-b>
</mapping>

<mapping>
<class-a>foo.D</class-a>
<class-b>foo.bar.D</class-b>
</mapping>

これらのクラスはすべて同一です。つまり、D と D は同じ属性 (C と C など) を持っています。

問題: dozer に渡すオブジェクトには、C または D (ポリモーフィズム) によって初期化できるタイプ B の属性があります。dozer が新しいマップされたオブジェクトを返すとき、C や D ではなく、常に B の属性タイプを返します。これを修正するにはどうすればよいですか?

4

2 に答える 2

1

継承マッピングのセクションをご覧ください。このようなマッピングは、サブクラスを持つフィールド クラスに使用できます。

<mapping>
    <class-a>foo.Source</class-a>
    <class-b>foo.Dest</class-b>
    <field>
      <a>attr</a>
      <b>attr</b>
      <a-hint>foo.B, foo.C, foo.D</a-hint>
      <b-hint>foo.bar.B, foo.bar.C, foo.bar.D</b-hint>
   </field>
</mapping>

編集: ある種の自動ポリモーフィズム機能 requestを実装します。次の Dozer リリースに含まれると思います。

于 2013-01-09T14:32:31.530 に答える
0

-私はあなたが必要だと思いますexplicit cast

例えば:

B b = new C();

go(b)

//////////Called Method////////////////

public void go(B bx){

    C c = (C) bx;

}
于 2013-01-08T10:42:40.767 に答える