2014-01-28 47 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)方法。