2013-01-08 58 views
3

我有四類:多態性推土機

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. 如何解決這個問題?

回答

0

-我認爲你需要一個explicit cast

如:

B b = new C(); 

go(b) 

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

public void go(B bx){ 

    C c = (C) bx; 

} 
+0

嗯,我知道這個,問題是如何用推土機做到這一點 –

1

請隨便看看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版本中。