我有四节课:
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(多态性)来初始化该属性。
当推土机返回新的映射对象时,它将始终将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版本中。