2015-03-13 23 views
0

B擴展A,C延伸的動態與子類裝訂 「沒有合適的方法找到了」

試圖改變:

public void convertA(A a) { 

    AClass clazz = new AClass(); 

    if (a instanceof B) { 
     clazz.setX(convertBtoX(a)); 
    } else if (a instanceof C) { 
     clazz.setY(convertCtoY(a)); 
    } 

} 

public void convertAbis(A a) { 

    AClass clazz = fill(a); //ERROR NO SUITABLE METHOD FOUND FOR FILL 

} 


public AClass fill(B b) { 
    clazz.setX(convertBtoX(b)); 
} 

public AClass fill(C c) { 
    clazz.setY(convertCtoY(c)); 
} 

的結果是「沒有合適的方法找到填充「的錯誤。 我怎樣才能刪除「實例」開關? A,B,C是Data Trasfer Object,不應該知道X Y,反之亦然,因此我不能簡單地將填充方法添加到A,B,C類

對此提出建議?

回答

1

fill(a)不會自動匹配B和C參數,但會尋找fill(A a)

要解決您的問題,請在下面嘗試。

首先在類A中創建一個抽象函數void fill(AClass c)

B類創建這個函數:

public void fill(AClass clazz){ 
    clazz.setX(convertBtoX(this)); 
} 

,做幾乎同樣以C類。

public void fill(AClass clazz){ 
    clazz.setY(convertCtoY(c)); 
} 

然後因爲這樣使用:

void convertABis(A a){ 
    AClass clazz = new AClass(); 
    a.fill(clazz); 
} 
+0

「A,B,C是Data Trasfer Object,不應該知道X Y,反之亦然,所以我不能簡單地將填充方法添加到A,B,C類。」 – 2015-03-13 09:29:36

1

我認爲這個問題是A不是BC一個子類,但也有BC是的A子類。因此,將A類型的對象傳遞給方法fill不是可能的。

相關問題