在我的代碼,我有(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」。
在我的代碼,我有(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」。
您需要定義一個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?
在你的情況下,它是。在這種情況下,你在做什麼是你分別串聯的v1
和v2
的字符串表示。假設你做你的V
類中重寫這樣方法,以便您可以打印東西,你可以工作,+
操作字符串沒有你所需要的邏輯。此外,你會那麼需要將字符串澆鑄成E
類型的對象,這是最有可能失敗。
在Java中,您不能重載操作符。那就是你不能使用+
運算符直接求和兩個對象。相反,您需要實施一個add(Object)
方法。
也在做信息=(E)v1.toString()+ v2.toString()是錯誤的? –
@MarcoMicheli:我修改了我的回答來回答你的問題。我希望這有幫助。 – npinti