2014-01-28 94 views
0

在我的代碼,我有(E和V是泛型類型):添加兩個泛型類型到另一種類型的

E info; 
V v1, v1; 

如果我寫:

info = (E) v1 + v2 

我得到一個錯誤:SparseGraph.java :163:operator +不能應用於V,V。

如何添加v1和v2以獲得「info」變量內的結果?正如你所看到的,我正在使用這段代碼來創建一個SparseGraph,info是圖的一個Edge的信息。如果邊緣影響頂點「A」和頂點「B」,則信息應該是「AB」。

回答

1

您需要定義一個Add操作才能做到這一點。這是因爲添加的概念因使用不同的類型而不同。例如,5 + 9產生14,如果你把他們當作整數,但你得到59,如果你把它們當做字符串(假設你使用的+字符串的默認實現)。

所以短褲,你V必須實現一個名爲add(因爲Java不支持operator overloading,如指出here)方法,需要一個或多個其他V類型的對象。在這種方法中,你將擁有你所描述的邏輯。

public V add(V source) 
{ 
    //logic to add sparse graphs. 
} 

另外,該線路:info = (E) v1 + v2假定V可以以某種方式被強制轉換爲E。您可能還需要實現V中的方法,該方法給出了一個稀疏圖,您可以獲得您的邊緣。

根據您的問題:

Also doing info = (E) v1.toString() + v2.toString() is wrong?

在你的情況下,它是。在這種情況下,你在做什麼是你分別串聯的v1v2的字符串表示。假設你做你的V類中重寫這樣方法,以便您可以打印東西,你可以工作,+操作字符串沒有你所需要的邏輯。此外,你會那麼需要將字符串澆鑄成E類型的對象,這是最有可能失敗。

+0

也在做信息=(E)v1.toString()+ v2.toString()是錯誤的? –

+0

@MarcoMicheli:我修改了我的回答來回答你的問題。我希望這有幫助。 – npinti

0

在Java中,您不能重載操作符。那就是你不能使用+運算符直接求和兩個對象。相反,您需要實施一個add(Object)方法。

相關問題