私は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などは同じです。
問題: 私はブルドーザーに渡しているオブジェクトでは、私はタイプBの属性。CまたはD(多態性)で初期化できます。 dozerが新しいマップされたオブジェクトを返すと、CやDではなく常にBの属性タイプを返します。 これを修正するには?
回答:
回答№1は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>
編集:私はある種の自動多態性を実装する 機能リクエスト。私は思う、それは次のDozerのリリースに含まれるでしょう。
回答№2の場合は0
- 私はあなたが必要と思う explicit cast
.
例えば:
B b = new C();
go(b)
//////////Called Method////////////////
public void go(B bx){
C c = (C) bx;
}