在我的代码,我有(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