我有四节课:
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返回新的映射对象时,它总是将B的属性类型返回给我,而不是C或D.
如何解决这个问题?
解决方法:
请查看Inheritance Mapping section.您可以将这种映射用于具有子类的字段类.
<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>
编辑:我实现了某种类型的自动多态feature request.我认为,它将包含在下一个Dozer版本中.